Given an integer, write a function to determine if it is a power of two.

思路:

这道题有一个技巧,还是和位运算有关,首先看下面规律:

2的0次方0001
2的1次方0010
2的2次方0100
2的3次方1000

实际上,因为是二进制数(二进制数不是白叫的),因此所有的Power of Two的二进制数形式均为最高位(不考虑1左边的位)为1,其它都为0。
如果此时我们减1的话,则最高位会降一位,其余为0的位现在都为变为1,那么我们把两数相与,就会得到0。
如果这个数不是Power of Two就没有这个性质。

实现:

1
2
def isPowerOfTwo(n):
return (n > 0 and not(n & n-1))