给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16
输出: true
示例 2:
输入: 5
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
方法一:
class Solution {
public boolean isPowerOfFour(int num) {
while(num%4==0)
{
num/=4;
if(num==0||num==1)
{
break;
}
}
if(num==1)
{
return true;
}
else
{
return false;
}
}
}
方法二:位运算
4的幂都有一个特点,二进制位奇数位为1,偶数位为0
10101010101010101010101010101010,因此如果一个数和前面这个二进制数字进行&运算之后还是它本身,那么他一定奇数位为1,偶数位为0,
但是,如果这个数是20呢,比如10100,他进行&运算之后也是他本身
因此我们先进行一个判断,判断他是不是2的幂,如果是,那就说明只有最高位才为1,其他位都为0,之后再进行和10101010101010101010101010101010的&操作
而10101010101010101010101010101010的16进制写法是0x55555555
class Solution {
public boolean isPowerOfFour(int num) {
if(num<=0)
{
return false;
}
if((num&num-1)!=0)
{
return false;
}
if((num&0x55555555)==num)
{
return true;
}
return false;
}
}