这个Python代码如何检查一个数字是否是2的幂?n>0
很简单,但是(n & (n - 1)) == 0
做什么呢?
def is_Power_of_two(n):
return n > 0 and (n & (n - 1)) == 0
提供良好解释的帖子:
&python中的平均值
下面检查一个整数是奇数还是偶数,并返回一个布尔值
(n & (n - 1)) == 0
如果n = 2,则
(n & (n - 1)) == 0
>>> True
如果n = 7,则
(n & (n - 1)) == 0
>>> False
函数is_Power_of_two(n)检查n是否大于0AND如果n是偶数。如果两个条件都满足,函数将返回true.对于整型'&'计算其操作数的逻辑位与。我们取n=4
(4,(4 - 1)) = 4&3
在二进制
100 = 4
011 = 3
和
100 & 011= 000
这样做的原因是,在二进制中,从任何2的幂数中减去1,得到的都是相同的数字,所有的位都颠倒了。当你二进制与(&)这两个在一起,你总是得到一个0。
举个例子来说明——任何2的幂数在二进制中都写成1和后面的0。1、2、4、8、16……是用二进制表示的1 10 100 1000减去1只会得到一个比它小的数字0 01 011 0111等等