为何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
相关产品推荐
相关产品推荐

