算法题/求二进制数中1的个数

来源:互联网 发布:哈尔滨java培训机构 编辑:程序博客网 时间:2024/06/04 19:01

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-8def 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 Falseprint(count_1(7))print(pow_2(7))print(count_1(8))print(pow_2(8))

这里写图片描述