题目:
实现一个方法,来判断一个正整数是否是2的整数次幂(如16是2的4次方,返回true;18不是2的整数次幂,则返回false)。要求性能尽可能高。
分析:
十进制 | 二进制 | 原数值-1 | n&n-1 | 是否为2的整数次幂 |
---|---|---|---|---|
8 | 1000B | 111B | 0 | 是 |
16 | 10000B | 1111B | 0 | 是 |
32 | 100000B | 11111B | 0 | 是 |
64 | 1000000B | 111111B | 0 | 是 |
100 | 1100100B | 1100011B | 1100000B | 否 |
说明:
0和1按位与运算的结果是0,所以凡是2的整数次幂和它本身减1的结果进行与运算,结果都必定是0,反之,如果一个整数不是2的整数次幂,结果一定不是0!
代码:
public static boolean isPowerOf2(int num) {
return (num&num-1) == 0;
}
参考:《小灰的算法之旅》5.5节