27岁Pyhon初学者

# -*- 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&0xffffffff0xffffffff 表示 32 个 1,做这一个步骤是为了让 n 显示 32 位,否则默认按 4 位显示。

补码:按 32 位取反码后+1。

最后 n=(n-1)&n,非常巧妙了,n-1 的作用是把最右边 1 后面的数字取反,位与运算后就可以这个 1 后面的数字变成 0,while 循环后就可以数出有多少个 1 了。