问题Given an integer, write a function to determine if it is a power of two.
solution1
思路:对于纯数字的问题,可以试着用位操作的方法来进行解决,观察下所有2的幂次方的2进制数特征:1,10,100,1000.....所有的这些2进制数都是首位为1其余为0,这是一个很明显得特征,那么根据这个特征来设计解决方案,使用循环进行按位与操作(与1想与),并记录结果,每次与操作后右移一位,所有的中间结果+起来==1是最后的结果。
代码
class Solution{
public:
bool isPowerOfTwo(int n){
int sum=0;
while(n>0)
{
sum+=n&1;
n>>1;
}
return sum==1;
}
}
solution2
每个是2的n次幂的整数-1与原来的二进制数相与=0,利用这点一行代码来完成。
代码:
class Solution {
public:
bool isPowerOfTwo(int n) {
return ((n>0) && ((n&(n-1))==0));
}
};