这个貌似简单的问题,用处其实蛮大的,比如我们做信号处理的,FFT是常用的一种工具,而模2算法又是最常见的(模4或者质因子分解等其他算法暂不表),往往就需要判断长度是否为2的整数次幂。这里把看到的两种算法整理在这里备忘。
方法一: 简洁法
bool power_of_2(int x)
{
//2的整数次幂都是形如1000...000的
return((x > 0) && !(x & (x - 1)));
}
方法二: 基本法
bool power_of_2(int x)
{
if(x < 0) {
return false;
}
while(x) {
if(x == 2) {
return true;
}
if((x % 2) == 0) {
x >>= 1;
} else {
return false;
}
}
}