方法1 用移位方法
public static boolean method(int a) {
if (a < 1)
return false;
int num = 1;
while (num <= a) {
if (num == a) {
return true;
}
num = num << 1;
}
return false;
}
方法2 用这个数和这个数减一进行与运算
原理:如果一个数是二的n次幂,则这个数的二进制形式只有一个1,这个数减一的二进制形式和原来的数的二进制形式每一位都不同。例如:
00010000 -> 00001111
这样两者的&运算结果为0
而如果原来的数不是2的n次幂,则&运算的结果不为0
public static boolean method(int a) {
int i;
i = a & (a - 1);
return i == 0;
}