给定一个整数,判断该数是否是2(或3 或4)的幂次
/**
* 判断一个数是否是2的幂次
* 2的幂次的数规律
* 10
* 100
* 1000
* 只有一个1
* (n & (n-1)) 可以去掉二进制中最后以一个1
* @param n
* @return
*/
public boolean isPowerTwo(int n) {
if (n <= 0) {
return false;
}
return (n & (n-1))==0;
}
/**
* 判断一个数是否是3的幂次
* 不使用循环 或 递归
* @param n
* @return
*/
public boolean isPowerThree(int n) {
if (n < 0) {
return false;
}
int k = (int) (Math.log(Integer.MAX_VALUE) / Math.log(3));
int big = (int) Math.pow(3, k);
return (big % n == 0);
}
/**
* 判断一个数是否是4的幂次
* 规律:
* 在2次幂的基础上保留奇数为1的数 所以增加了如下
* 在判断是否是2的幂次的基础上增加了
* (n & 0x55555555) != 0
* @param n
* @return
*/
public boolean isPowerFour(int n) {
if (n <= 0) {
return false;
}
return ((n & (n-1)) == 0) && ((n & 0x55555555) != 0);
}