这道题我看了答案我没懂,为什么要和1进行与操作呢,后来查了一下python的bin的用法,恍然大悟。
1.Python中的整型是补码形式存储的
2.Python中bin一个负数(十进制表示),输出的是它的原码的二进制表示加上个负号,方便查看
3.Python中bin一个负数(十六进制表示),输出的是对应的二进制表示。
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
if n >= 0:
return bin(n).count('1')
else:
return bin(n&0xffffffff).count('1')
如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。
把原来的整数和减去1之后的结果做与运算,从原来整数最右边一个1那一位开始所有位都会变成0。—-牛客网
#second
count=0
while n&0xffffffff!=0:
count+=1
n=(n-1)&n
return count