boxmoe_header_banner_img

Hello! 欢迎来到星海博客!

文章导读

利用位运算实现计算2的幂


avatar
XingHai 2026年3月10日 69

题目:

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。

如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。

题目来源:231.2的幂

题目分析:

若 n=2
x
且 x 为自然数(即 n 为 2 的幂),则一定满足以下条件:

1.恒有n & (n – 1) == 0。因为二进制转为十进制公式为1 * 2x + a1 * 2x-1 +···+ ax * 20,所以2的幂n的二进制为xxx00100000,所以n – 1的二进制为xxx00011111,所以n & (n – 1) == 0。

2.一定满足n > 0

因此,通过n > 0 且 n & (n - 1) == 0 即可判定是否满足 n=2x

代码:

class Solution{
public:
    bool isPowerOfTwo(int n){
        if(n <= 0) return true;
        return !(n & n - 1);
    }
}

复杂度分析

  • 时间复杂度:O(1)。
  • 空间复杂度:O(1)。


评论(1)

查看评论列表
评论头像
丑数 - 星海博客 2026年03月11日
[…] 判断是否为整数就需要判断 n 是否满足上式条件。首先可以先判断 n 是否为正整数,是否含有质因数并且是否是1,然后不断除以3,5直到没有质因数3,5,如果n为丑数这时n = 2a ,最后通过位运算快速判断是否为2的幂(利用位运算实现计算2的幂 – 星海博客),如果是2的幂那么n就为丑数,否则就不是丑数。 […]

发表评论

表情 颜文字
插入代码