题目:
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16 输出: true
示例 2:
输入: 5 输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
思想:
这里只解释进阶。不用循环的话,那肯定要做位运算了,4的幂肯定是二进制只有1个1,并且1在偶数位上,所以标志位就是0x5555 5555,但是还不能直接&运算,毕竟有可能非4的幂刚好就是类似0x55555555这样多个1的数呢,所以我们要判断1的个数是否为1,当初就是卡在这一步,后面看了网上答案,才发现可以先判断是否为2的幂,2的幂判断就是num &(num -1).
代码:
class Solution {
public boolean isPowerOfFour(int num) {
if (num < 0 || (num & (num-1)) > 0 ){
//check(is or not) a power of 2.
return false;
}
if((num & 0x55555555) > 0){
//check 1 on odd bits
return true;
}
return false;
}
}