python中首先明确一点就是二进制没有位数的概念,所以也就无法获得负数真实表示方法
n = -3 n = n & 0xffffffff #n=4294967293 bin(n)#查看二进制形式:'0b11111111111111111111111111111101'获得的最终结果python会认为是一个正数(因为没有位数的概念,所以首位的1并不代表符号位),那么获得
0b11111111111111111111111111111101只是形式上和-3的补码相同。
python中,对于负数,无论是右移操作,还是n&(n-1)操作,都会陷入死循环。
所以利用上述这个小技巧,将负数的影响用于0xffffffff相与变为python认为的正数(与机器中的补码相同)。
然后利用正数来进行操作就简单了。
# -*- 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 - 1) & n return count