面试题15:二进制中1的个数
题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
详细代码:
class Solution:
def NumberOf1(self, n):
# write code here
count = 0
if n < 0:
n = n & 0xffffffff
while(n):
count += 1
n = (n - 1) & n
return count
- 如果该整数是负数,要把它和0xffffffff相与,消除负数的影响。
相关题目:
1、判断一个整数是不是2的整数次方
思路:若一个整数是2的整数次方,则他的二进制表示中有且只有一位是1
代码:
class Solution:
def multiple(self, n):
if n <= 0:
return False
if not (n-1) & n:
return True
return False
2、输入两个整数m和n,计算需要改变m二进制中的多少位才能得到n。
思路:先异或,在计算1的个数
代码:
class Solution:
def NumberOfChange(self, m, n):
if m < 0:
m = m & 0xffffffff
if n < 0:
n = n & 0xffffffff
count = 0
diff = m ^ n
while(diff):
count += 1
diff = (diff - 1) & diff
return count
- 把一个整数减去1再和原来的整数做位与运算,得到的结果相当于把整数二进制表示中的最右边的1变为0,许多二进制问题都可用这个思路解决!