Python二进制中1的个数
注意到每个非零整数n和n-1进行按位与运算,整数n的二进制数中最右边的1就会变成0,那么二进制数中的1的个数就会减少一个,因此可以利用一个循环,使得 n = n&(n-1) ,计算经过几次运算减少到0,就是有几个1。注意:书中给了另外两种方法,分别是原始n左移一位和右移一位的方法,因为Python不会出现整数溢出的情况,这里就不再考虑着两种方法。扩展:判断一个数值是不是2得整数次方,如果是的话,这个数的二进制数中有且只有一个1,那么这个数n会有 n&(n-1) == 0。或者求两个整数m和n需要改变m二进制中的多少位才能得到n,可以先做 m^n 的异或运算,然后求这个数中有多少个1。
'''
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
'''
class Solution:
def NumberOf1(self, n):
count = 0
if n < 0:
n = n & 0xffffffff
while n:
count += 1
n = (n-1)&n
return count
def NumberOf2(self, n):
if n < 0:
s = bin(n & 0xffffffff)
else:
s = bin(n)
return s.count('1')
# 判断一个数是不是2得整数次幂
def powerOf2(self, n):
if n&(n-1) == 0:
return True
else:
return False
# 判断两个数的二进制表示有多少位不一样, 直接比较两个数的二进制异或就可以
def andOr(self, m, n):
diff = m^n
count = 0
while diff:
count += 1
diff = diff&(diff-1)
return count
S = Solution()
print(S.NumberOf1(-1))
print(S.NumberOf2(-1))
print(S.powerOf2(64))
print(S.powerOf2(63))
print(S.andOr(10, 13))
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »