题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路 :按位和1做与运算,如果结果为1则计数,为0则跳过,>>为右移,但此方法不适合输入为负数
class Solution:
def NumberOf1(self, n):
# write code here
count = 0
while(n):
if n&1:
count = count + 1
n = n >> 1
return count
更为简单的方法:把一个整数减1后与原有整数做与运算,相当于把整数最右边的一个1变为了0,每循环一次减去一个1
class Solution:
def NumberOf1(self, n):
# write code here
count = 0
if n < 0:
n = n & 0xffffffff
while n != 0:
count= count + 1
n = (n-1)&n
return count
类似问题:
1、用一条语句判断是否为2的次方,2的次方只有一个1,(n-1)&n后变为0
2、改变m的多少位可以得到n,将m和n异或,异或的结果不同为1,相同为0,统计异或后数字中1的个数即可