📌  相关文章
📜  Python程序判断一个否是否是二的幂(1)

📅  最后修改于: 2023-12-03 15:19:34.870000             🧑  作者: Mango

判断一个数是否是2的幂

当一个数是2的幂时,说明它的二进制形式只有一位是1,其他都是0。例如2的3次幂为8,二进制为1000,只有一个1,因此它是2的幂。

我们可以通过位运算的方式来判断一个数是否是2的幂。具体方法是:

  • 如果一个数是2的幂,那么它的二进制表示中只有一个1,其他都是0。
  • 这时,如果我们把这个数减去1,得到的结果二进制表示中所有的1都变成了0,所有的0都变成了1。
  • 如果我们把这个数和它减去1的结果做位与运算,得到的结果应该是0。

下面是Python代码:

def is_power_of_two(n: int) -> bool:
    if n <= 0:
        return False
    return (n & (n - 1)) == 0

该函数接受一个整数n作为参数,如果n是2的幂,返回True,否则返回False。

我们可以测试一下这个函数的正确性:

assert is_power_of_two(2) == True
assert is_power_of_two(4) == True
assert is_power_of_two(5) == False
assert is_power_of_two(1024) == True
assert is_power_of_two(1023) == False

这些测试都通过了,说明我们的程序是正确的。

请注意,我们在函数开头加了一条特殊处理:

if n <= 0:
    return False

这是因为0不是2的幂,而负数的二进制表示中可能有多个1,因此也不是2的幂,我们需要把这些情况都排除掉。