本题其实也不算太难,但是没有解出。
思路,这个数需要满足几点:
- 大于0
- 是Power Of 2,这个很容易,直接
num & (num - 1)
,看结果是不是0即可 - 是不是Power Of 4:
- 构建一个数,二进制表达是
01010101010101010101
,太长了,所以只打出一部分,用16进制,表达则是0x55555555
- 所以如果num是power of 2,然后
num & 0x55555555
有两种可能性- 如果是power of 4,则说明在偶数位有1的存在,所以结果不是0
- 如果只是power of 2,则说明1只在奇数位,则结果必为0
class Solution {
public boolean isPowerOfFour(int num) {
return num > 0 && ((num & (num - 1)) == 0) && ((num & 0x55555555) != 0);
}
}
- 如果是power of 4,则说明在偶数位有1的存在,所以结果不是0
- 构建一个数,二进制表达是