📅  最后修改于: 2023-12-03 15:41:09.922000             🧑  作者: Mango
给定一个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,满足条件。
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