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)