Python实现二进制中1的个数,没看懂答案。。

二进制中1的个数

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

毫无头绪,查阅答案,很巧妙,但是仍有细节没看懂:

# -*- coding:utf-8 -*-

class Solution:

    def NumberOf1(self, n):

        count = 0

        if n < 0:

            n = n & 0xffffffff

        while n:

            count += 1

            n = (n-1)&n

        return count

算法思想:

n-1会让n最右边的1变为0,其左边所有的数字都不会改变,所以每 n = (n-1)&n一次,n就少一个1

没想通的地方:

为什么要有 n = n & 0xffffffff这一步,没有这一步就会死循环

你可能感兴趣的:(Python实现二进制中1的个数,没看懂答案。。)