如果采用循环去遍历2的次方数,来判断时,当这个数特别大,时间复杂度为O(n);
所以采用别的方法,2的次方数其二进制表示最高位肯定为1,其余为0。
例如:8 二进制位 1000,64 二进制位 1000000。将这个二进制-1,然后和其原来的数&运算,如果是
而的次方数,其结果应该为0,否则不是2的次方数。
代码如下 :
private static boolean isTwoPore(int n){
if(n==0){
return false;
}
if((n&n-1)==0){
return true;
}else {
return false;
}
}