You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++20中判断正整数是否为2的n次幂:哪种方法CPU效率更高?

判断正整数是否为2的幂:两种方法的CPU效率对比

判断一个正整数n是否为2的幂(如1、2、4、8这类数),有两种常用实现方式,我们从CPU效率角度对比哪种更优:

方法一:按位与运算判断

利用2的幂的二进制表示中置位不超过1位的特性,代码实现如下:

bool test = n & (n - 1) == 0;

这个操作效率极高,仅涉及减法、按位与运算,以及基于零标志位(ZF)的条件分支。当表达式结果为true时,即可判定n是2的幂。

方法二:使用std::popcount统计置位

C++20标准库提供了std::popcount(种群计数)函数,用于统计二进制中1的位数,代码实现如下:

bool test = std::popcount(n) == 1; // (C++20起支持)

若硬件支持POPCNT指令,该函数的执行速度会非常快。

C++通常遵循「按需付费」原则,而本次判断仅需确认是否只有1个置位,并不需要统计具体的置位数量。

CPU效率对比

从CPU执行效率来看,第一种方法更具优势:

  • 第一种方法仅需3个基础单周期指令:减法、按位与、零标志位判断,几乎无额外开销。
  • 第二种方法即便硬件支持POPCNT指令,本质上完成了「统计所有置位数量」的完整操作,做了超出需求的计算,违背了「按需付费」原则;若硬件不支持POPCNT,编译器会生成模拟代码,效率会进一步降低。

内容的提问来源于stack exchange,提问作者Amit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:24:54