python 2.7
输出数字的二进制中的1的个数; 判断一个数是否为2的幂
思路:一个数n与n-1相&消除最低位的1,并且如果这个数n与n-1相&==0,则这个数为2的次幂。
快速法,其运算次数与输入n的大小无关,只与n中1的个数有关。如果n的二进制表示中有k个1,那么这个方法只需要循环k次即可。其原理是不断清除n的二进制表示中最右边的1,同时累加计数器,直至n为0。
假设n中有5个1,n&n-1可以清除n中最右边的1,生成的数中包含四个1,在继续&操作生成的数中包含3个1.。。。。
判断n是否为2的次幂,即判断 n&(n-1) ==0是否成立
#coding:utf-8
def count_1(n):
if n==0:
return 0
else:
counter = 0
while n:
n = n&(n-1)
counter +=1
return counter
#判断是否为2的次幂
def pow_2(n):
if n&n-1==0:
return True
else:
return False
print(count_1(7))
print(pow_2(7))
print(count_1(8))
print(pow_2(8))