10.3Power of Four二进制特性
题目描述
给定一个整数,判断它是否是4的次方。
输入输出样例
Input :16
Output:true
题解
像这种找是不是x的倍数的题,最好的解法就是先找到在int的范围下,x的最大次方是多少,找到之后,把n和这个数按位与,如果结果不是0,那么就说明这个数是4的次方。
当然,还有两个前置条件,第一就是x必须要大于0,第二就是简单判断是否为2的次方,如果不是 2 的次方的数 = 二进制有好几个 1,导致无法准确判断是否为4的次方。第三步就是判断跟最高次方的与了。
cpp
#include <iostream>
using namespace std;
bool isPowerOfFour(int n) {
bool a = n > 0; //n是否>0
bool b = !(n & (n - 1)); //b为true则证明n是2的次方
bool c = n & 1431655765; //判断那个唯一的 1,是不是在偶数位
return a && b && c;
}
int main() {
int n = 16;
if (isPowerOfFour(n)) {
cout << "true" << endl;
}
else {
cout << "false" << endl;
}
return 0;
}