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

为何if(n%2==1)比if(n%2)更快?LeetCode位计数问题疑惑

关于「Number of 1 Bits」中两种判断条件的性能差异
  • 首先要明确:LeetCode的运行时间统计存在较大随机性,0ms和3ms的差异大概率是测试环境的波动(比如服务器实时负载、同一测试用例的多次执行偏差),而非两种写法本身的性能差距。

  • 从语法逻辑上看,对于无符号整数,if(n%2)和if(n%2==1)是完全等价的:无符号整数对2取模的结果只能是0或1,n%2非零就等价于等于1。主流编译器在优化时,甚至会把这两种写法编译成完全相同的机器码。

  • 如果非要深究理论上的微小差异(实际测试中几乎可忽略),某些编译器对显式的==1比较可能会生成更直接的判断指令,但这种差异远不足以造成3ms和0ms的差距。

  • 额外建议:统计二进制中1的个数,更高效的写法是使用位运算n & 1来判断最后一位是否为1——位运算在底层的执行效率比取模运算更高。示例代码如下:

    int hammingWeight(uint32_t n) {
        int count = 0;
        while(n) {
            count += n & 1;
            n >>= 1;
        }
        return count;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:25:17