📜  算法测验|位算法|问题4(1)

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

算法测验 | 位算法 | 问题4

问题描述

给定一个32位无符号整数,判断是否是2的次幂。

解题思路

如果一个数是2的次幂,则其二进制表示中只有一个1,例如2的次幂的二进制表示为 10,4的次幂的二进制表示为 100,8的次幂的二进制表示为 1000,以此类推。

如果我们将该数与其减一后的数进行位与运算,结果一定为0,例如:

n = 8
(n & (n - 1)) == 0  # 返回True

这是因为,假设n的二进制表示为1000,则n-1的二进制表示为0111,n与n-1的位与运算结果为0000,满足条件。

解题步骤
  1. 将给定的整数转换为32位无符号整数,并保存在变量n中。
  2. 判断n是否等于0,如果是,则返回False,因为0不是2的次幂。
  3. 判断n与n-1的位与运算结果是否为0,如果是,则返回True,否则返回False。
代码实现
def is_power_of_two(n: int) -> bool:
    if n == 0:
        return False
    return (n & (n - 1)) == 0
测试样例
assert is_power_of_two(2) == True
assert is_power_of_two(4) == True
assert is_power_of_two(8) == True
assert is_power_of_two(16) == True
assert is_power_of_two(1) == True
assert is_power_of_two(0) == False
assert is_power_of_two(3) == False
assert is_power_of_two(5) == False
assert is_power_of_two(7) == False
assert is_power_of_two(10) == False