问题:https://leetcode.com/problems/power-of-four/?tab=Description
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example:Given num = 16, return true. Given num = 5, return false.
给一个整数,写一个函数判断它是否是4的倍数。
例子:16,返回true。 5,返回false。
分析:首先判断num是否为2的幂数。利用num&(num-1)=0来判断。接下来再利用一个数0x55555555,也就是01010101……01010101,奇数位全为1,偶数位全为0。如果num是4的倍数,则num可能为4,16,64,256…分别是第3位是1,第5位是1,第7位是1,第9位是1……,所以num&0x55555555=1。若num只是2的幂数,不是4的幂数,则num可能为2,8,32,第2位是1,第4位是1,第6位是1,偶数位是1,所以与0x5555555与的结果是0。
参考C++代码:
class Solution {
public:
bool isPowerOfFour(int num) {
int tem=0x55555555;
if(num&(num-1)) return false;
else if(num&tem) return true;
else return false;
}
};