📅  最后修改于: 2023-12-03 15:40:35.896000             🧑  作者: Mango
当我们需要判断一个数是否为2的幂时,可以利用位运算快速计算。在二进制下,2的幂次方只有最高位为1,其余位为0。例如2^3=8,在二进制下为1000。
位运算中有三个运算符可以用来判断一个数是否为2的幂:与(&)、或(|)、异或(^)。
与运算:两个数对应的二进制位都为1时结果为1,否则为0。因此,若n为2的幂,则n与n-1进行与运算的结果为0。
或运算:两个数对应的二进制位都为0时结果为0,否则为1。因此,若n为2的幂,则n与n-1进行或运算的结果为n。
异或运算:两个数对应的二进制位相同则结果为0,不同则结果为1。因此,若n为2的幂,则n与n-1进行异或运算的结果为1。
def is_power_of_two(n: int) -> bool:
"""
判断n是否为2的幂
"""
if n <= 0:
return False
return n & (n - 1) == 0
以上代码中,我们首先判断n是否小于等于0,若是,则直接返回False。否则,我们用n与n-1进行与运算,若结果为0,则n为2的幂,返回True;否则,返回False。