这是上一道题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;
}
}