剑指offer 二进制中1的个数 python

先上代码

class Solution2:
    def NumberOf1(self, n):
        n = n & 0xffffffff if n < 0 else n # 把负数转换成一个正数 这个正数的二进制表示和附属的补码是一样的
        cnt = 0
        while n: # 只要n不为0 就必然存在1在某些位置上
            n = n & (n - 1) # 消灭掉n中最靠右的一个1
            cnt += 1
        return cnt

这里面让人疑惑的就是python的补码
实际上python应该是没有补码的
怎么能够手工获得一个负数的补码表示呢

image.png
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务