判断一个整数是否为2的整数次幂

这个貌似简单的问题,用处其实蛮大的,比如我们做信号处理的,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;

        }

    }

}

你可能感兴趣的:(判断一个整数是否为2的整数次幂)