# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
cnt = 0
if n<0:
n = n & 0xffffffff
while n:
cnt+=1
n = (n-1) & n
return cnt
针对这一段代码,讲讲里面的细节,只对小白。
首先为什么要 n=n&0xffffffff,0xffffffff 表示 32 个 1,做这一个步骤是为了让 n 显示 32 位,否则默认按 4 位显示。
补码:按 32 位取反码后+1。
最后 n=(n-1)&n,非常巧妙了,n-1 的作用是把最右边 1 后面的数字取反,位与运算后就可以这个 1 后面的数字变成 0,while 循环后就可以数出有多少个 1 了。