# -*- 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 了。