剑指Offer刷题笔记——二进制中1的个数

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

在Python中,由于负数使用补码表示的,对于负数,最高位为1,而负数在计算机是以补码存在的,往右移,符号位不变,符号位1往右移,最终可能会出现全1的情况,导致死循环。与0xffffffff相与,就可以消除负数的影响。利用与0xffffffff相与把符号位变成普通的数值位。

https://blog.csdn.net/hunnu_denny/article/details/44620051  补码得相关概念。

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1(self, n):
        # write code here
        count = 0
        if n<0:
            n = n & 0xffffffff
        while n:
            count += 1
            n = n & (n-1)
        return count

 

# -*- coding:utf-8 -*-
# 直接移位
class Solution:
    def NumberOf1(self, n):
        # write code here
        return sum([(n >> i & 1) for i in range(0,32)])

 

你可能感兴趣的:(剑指Offer刷题笔记——二进制中1的个数)