本题其实也不算太难,但是没有解出。
    思路,这个数需要满足几点:

    • 大于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
          1. class Solution {
          2. public boolean isPowerOfFour(int num) {
          3. return num > 0 && ((num & (num - 1)) == 0) && ((num & 0x55555555) != 0);
          4. }
          5. }