首页 > 解决方案 > 在 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 = 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 等。


推荐阅读