Question
Given an integer, write a function to determine if it is a power of two.
Java Code
//版本一:通过整数二进制位中1的个数来判断
public boolean isPowerOfTwo(int n) {
if((n >>> 31) == 1)//n为负数
return false;
//n的二进制最低位是否为1,注意2^0 = 1
int count = n & 1;
//统计各个二进制位上1的个数
while((n >>>= 1) != 0)
if((n & 1) == 1) ++count;
//如果所有二进制位上只有一个1,则n是2的幂
return count == 1;
}
//版本二:直接通过求对数判断
public boolean isPowerOfTwo(int n) {
if(n < 1) return false;
//必须用10计算换底公式,如果用e换底会有较大的计算精度误差
double pow = Math.log10(n) / Math.log10(2);
return pow == (int)pow;
}
更新(2016.07.30)
//版本三:直接通过与运算判断二进制中是否只有一个位为1
public boolean isPowerOfTwo(int n) {
return (n < 1) ? false : (n & (n-1)) == 0;
}