输入一个整数,输出该数二进制表示中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)])