二进制中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这一步,没有这一步就会死循环