Python3算法题:如何判断一个数是否为2的n次方 | 逻辑与,移位

时间:2025-02-09 10:34:33

Python3 位运算符 | 与 或 异或 取反 原码 反码 补码
方法一:逻辑与运算法,2的平方数的二进制表示均为10,100,1000,10000,·····;例如数字8,二进制位1000,数字7为1000-1=0111, 1000&0111=0,若为0则是完全平方数,否则不是。

def isPower(k):
    if k < 1: return False
    m = k&(k-1)
    return m == 0
isPower(8)

方法二:二进制左移位<<,二进制1,左移位1位得到二进制10,再左移位1位得到二进制100,得到的数字全是2的n次方, 不停的移位,直到找到为止。

def isPower(k):
    if k < 1: return False
    i = 1
    while i<=k:
        if i == k: return True
        i = i<<1
    return False
isPower(8)

方法三:不停的除以2,直到结果为1为止。

def isPower(k):
    if k < 1: return False
    while k>=1:
        if k==1: return True
        k/=2
    return False
isPower(64)