题解 | #二进制中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

全部评论

相关推荐

小红书 后端开发 总包n+8w+期权
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务