给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16
输出: true
示例 2:
输入: 5
输出: false
思路:循环, 注意边界值 1
bool isPowerOfFour(int num) {
if(num < 1){
return false;
}
while(num > 1){
if(0 != num % 4){
return false;
}
num = num / 4;
}
return true;
}
不用循环思路:
数字4幂的二进制类似于100,10000,1000000形式。
可以有如下结论:
4的幂一定是2的。
4的幂和2的幂一样,只会出现一位1。但是,4的1总是出现在奇数位。
0x5 = 0101b可以用来校验奇数位上的1。
//0x5 = 0101b
bool isPowerOfFour(int num) {
if (num <= 0 || num & (num-1)){//check(is or not) a power of 2.
return false;
}
return num & 0x55555555;//check 1 on odd bits
}