二进制中1的个数(算法10)
文章目录
问题:实现一个函数,统计输入数字中一的个数
原理:
如果你知道位运算中的一个特点,这道题就简单了。
数字666的二进制形式是1010011010
,注意到(666-1)的二进制为1010011000
,观察发现,就是666消去了一个数字1
。那么666在消去一个数字1后剩下的部分可以通过位运算留下:666&(666-1)。利用这种特性,添加一个计数器,计算每次消去数字和保留剩下部分的次数。该次数就是我们需要的结果。
实现:
1 | def number_of_one(n): |
测试:
1 | import random |