342. 4的幂
理论上数字4幂的二进制类似于100,10000,1000000,etc…形式。可以有如下结论:
- 4的幂一定是2的。
- 4的幂和2的幂一样,只会出现一位1。但是,4的1总是出现在奇数位。
- 0x5 = 0101b可以用来校验奇数位上的1。
假如一个数是2的幂,那么num&num-1==0
首先判断是否是2的幂,如果是,那么二进制只有一个1,然后判断这个1是不是在奇数位,只需要和0X55555555(0x5代表0101)。
//0x5 = 0101b
bool isPowerOfFour(int num) {
if (num < 0 || num & (num-1)){//check(is or not) a power of 2.
return false; //这里的num & (num-1)返回最后一位上的数字
}
return num & 0x55555555;//check 1 on odd bits
// 之所以是0x55555555 因为这里用32位有符号整数 0x表示16进制 4个二进制位
}
循环解法
bool isPowerOfFour(int num) {
float temp;
if (num == 1) {
return true;
}
if (num < 4) {
return false;
}
while (1) {
temp = num / 4.0;
if (num/4 != temp) {
return false;
}
num = num / 4;
if (num == 1) {
return true;
}
}
return true;
}