📜  是 2 的幂 - C++ (1)

📅  最后修改于: 2023-12-03 14:55:10.951000             🧑  作者: Mango

是 2 的幂 - C++

在计算机科学中,有时候需要判断一个数是否为2的幂。这在处理一些位操作时非常有用。本文将介绍如何在C++中判断一个数是否为2的幂。

方法一:位运算

如果一个数n是2的幂,那么它的二进制表示中只有一位是1,其余都是0。比如,4的二进制表示是100,8的二进制表示是1000。因此,我们可以通过位运算来判断一个数是否为2的幂。

具体来说,需要用到按位与运算(&)。如果n是2的幂,那么n与n-1的结果应该为0。因为n-1会将n最低位的1变成0,其它位都变成1。例如,4的二进制表示为100,则4-1=011,此时将它们进行按位与运算,有:

100 & 011 = 000

因此,判断是否为2的幂的代码如下所示:

bool isPowerOfTwo(int n) {
    return n > 0 && (n & (n - 1)) == 0;
}

该函数先判断n是否大于0,然后判断n与n-1是否按位与的结果为0。如果是,则返回true,否则返回false。

方法二:数学运算

此外,还可以使用数学运算来判断一个数是否为2的幂。如果一个数n是2的幂,则log2(n)结果为整数。因此,可以使用C++中的log2函数获取以2为底n的对数,判断是否为整数即可。

bool isPowerOfTwo(int n) {
    return n > 0 && floor(log2(n)) == ceil(log2(n));
}

该函数先判断n是否大于0,然后使用log2函数获取以2为底n的对数,并分别取floor和ceil,判断它们是否相等。如果相等,则返回true,否则返回false。

总结

本文介绍了两种方法来判断一个数是否为2的幂。其中,位运算的方法效率更高,但是数学运算的方法更易于理解。在实际应用中,根据具体情况选择合适的方法即可。