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

📅  最后修改于: 2023-12-03 15:13:53.854000             🧑  作者: Mango

C++ 2 的幂

简介

本文介绍如何使用C++判断一个整数是否是2的幂。2的幂指的是2, 4, 8, 16, 32, ...这些数字。如果一个数字是2的幂,则其二进制表示中只有1位是1,其他都是0。例如8的二进制表示为1000,只有最高位是1。

思路

要判断一个数字是否是2的幂,我们可以将其转换为二进制表示,然后判断其中1的个数。如果只有1个1,则该数字是2的幂;否则不是。

另一个判断的方法是,对于2的幂n,n & (n-1)的值一定为0。这是因为n的二进制表示中只有1个1,其余都是0,而n-1的二进制表示中,最高位变为0,后面的0都变为1。因此n & (n-1)的值一定为0。如果一个数字不是2的幂,则n & (n-1)的值不为0。

代码
方法一:计算1的个数
bool isPowerOfTwo(int n) {
    int count = 0;
    while (n > 0) {
        count += n & 1;
        n >>= 1;
    }
    return count == 1;
}
方法二:位运算
bool isPowerOfTwo(int n) {
    return n > 0 && ((n & (n-1)) == 0);
}
总结

本文介绍了两种方法判断一个数字是否是2的幂。第一种方法通过计算二进制表示中1的数量来判断,第二种方法通过位运算来判断。使用位运算的方法更加简洁,但是计算1的数量的方法也有其优点,例如可以用于计算某个数字的二进制表示中1的个数。在实际应用中,可以根据具体情况选择使用哪种方法。