x & (x - 1) 消除x最后一位的1
1 | x = 15 |
- O(1) 时间检测X是否是2的n次方
一个数如果是2的n次方,则这个数的二进制中只有一个1
如果消去最后一位的1,则这个数为01
2
3
4x = 16
16 = 0b10000
15 = 0b01111
x & (x - 1) = 0 - 一个整数的二进制中有多少个1
x & (x - 1) 可以消除最后一位的1
while循环消除最后一位的1,直到结果为01
2
3
4
5
6a = 15
b = 0
while a > 0:
a = a & (a - 1)
b += 1
print b # 1的个数