题解 | #二进制中1的个数#

二进制中1的个数

http://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8

【剑指offer】二进制中1的个数(python)

思路:n&(n-1)位运算可以将n的位级表示中最低的那一位1置0。不断将1设置为0,直到n为0。
负数时注意补码转换。
补码:设某负数X,则X+X(反)= 0xFFFFFFFF,所以X+X(反)+1 = 0,可以得出 0 - X = X(反)+ 1这里 0 - X即定义为负数X的补码,这样,计算机在进行X-Y运算时实际可用X+Y(补)代替,硬件角度只需实现加法电路即可。同样的道理,0-X(补)=X(补)(反)+1 = X,即已知负数补码只需对其各位取反加一即可得到原码。

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1(self, n):
        # write code here
        # 注意负数的补码转换
        cnt = 0
        if n < 0:
            n &= 0xffffffff
        while n:
            cnt += 1
            n &= (n-1)
        return cnt

全部评论

相关推荐

06-05 19:46
已编辑
武汉大学 后端
点赞 评论 收藏
分享
程序员饺子:正常 我沟通了200多个 15个要简历 面试2个 全投的成都的小厂。很多看我是27直接不会了😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务