Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example 1:
Input: 16 Output: true
Example 2:
Input: 5 Output: false
题目大意:
给出一个int类型的数,判定是否为4的幂次方;
解题思路:
2和4的幂次方数在二进制下规则明显。
我们需要列举出其中的一部分就可以找出规律。
例:
1(1)
4(100)
16(10000)
可以看出4的幂次方数首先满足只有第一位为1的要求,与2的幂次方数吻合,所以我们首先判断是否2的幂次方数。
唯一与2的幂次方数不同的是,4的幂次方数的1从后向前数应该在奇数位上,判段num & 0x55555555的结果即可。
class Solution {
public:
bool isPowerOfFour(int num) {
if(num<=0) return false;
if(num & (num-1))
return false;
return num & 0x55555555;
}
};