若n = 2^x ,则首先n > 0
其次一定满足 n & (n-1) = 0
&为 “与” 运算符,与真值表如下:
A | B | Y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
举例:
- 判断6是否为2的幂: 6的二进制为0b110 5的二进制为0b101 0b110 & 0b101 = 0b100 = 4
- 判断16: 16 = 0b1000 , 15 = 0b0111 , 0b1000 & 0b0111 = 0b0000 = 0
Python 代码如下:
def is_er(num):
if num > 0 and num&(num-1)==0:
return True
else:
return False
扩展:
判断一个数是否是4的幂:
在是否是二进制的基础上,判断 该数除以3是否余1
num%3 == 1