原数(10进制) | 原数(2进制) | 原数-1(2进制) |
---|---|---|
1 | 1 | 0 |
2 | 10 | 01 |
4 | 100 | 011 |
8 | 1000 | 0111 |
16 | 10000 | 01111 |
观察上面的表格,如果1个数是2的幂次方,转换成2进制,必然最高位是1,其它位都是0,同时这个数减1后,所有有效位全是0,利用这个特点,做1次&位运算即可
代码语言:javascript复制boolean isPowerOf2(int a) {
return (a & (a - 1)) == 0;
}
原数(10进制) | 原数(2进制) | 原数-1(2进制) |
---|---|---|
1 | 1 | 0 |
2 | 10 | 01 |
4 | 100 | 011 |
8 | 1000 | 0111 |
16 | 10000 | 01111 |
观察上面的表格,如果1个数是2的幂次方,转换成2进制,必然最高位是1,其它位都是0,同时这个数减1后,所有有效位全是0,利用这个特点,做1次&位运算即可
代码语言:javascript复制boolean isPowerOf2(int a) {
return (a & (a - 1)) == 0;
}