原数(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次&位运算即可
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次&位运算即可
boolean isPowerOf2(int a) { return (a & (a - 1)) == 0; }