1,题目要求
Given an integer, write a function to determine if it is a power of two.
即判断一个数是不是2的幂次。
2,跟前面求是否是3的幂次类似,可以直接套用那两种思想。
同时,可以用一种新的方式,适用于2的幂次的方法:
首先,2的幂次的二进制形式都是“100..0”的形式,因此,如果n是2的幂次,则其与n-1进行按位与,最后得到的一定是0.
3,程序源码
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n<=0) return false;
//return (n>0 && fmod(pow(2,30), n) == 0); 一种可行的办法,不过效率不是太高
return !(n&(n-1));
}
};