检查Python中2的幂



这个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等等

最新更新