这是上一道题 2 的幂的进阶,首先我们看和 2 的幂有什么不同。2 的幂有 1,2,4,8......,而 4 的幂有 1,4,16,64,也就是说少了 2,8,32......,我们再观察一下他们的二进制数
1:1
2:10
4:100
8:1000
16:10000
我们发现,满足 4 的幂的条件就是,在满足 2 的幂的前提下,二进制中 1 的位置必须是在奇数位。那么如何判断在奇数位?其实只要让其和 0101 0101 0101 0101 ... 这个二进制数对应的十进制做 & 即可,0101 转换成十进制是 5,那么最多的 0101 构成的十进制就是 0x55555555
- class Solution {
- public boolean isPowerOfFour(int num) {
- if(num <= 0)
- return false;
- boolean a = (num & (num - 1)) == 0;
- boolean b = (num & 0x55555555) != 0;
- return a && b;
- }
- }