微优化:x& 1对x%2

时间:2014-06-04 19:46:11

标签: c++ micro-optimization

就速度而言,速度最快,为什么?

x&1 //checks last bit

x%2 // performs modulo operation 

1 个答案:

答案 0 :(得分:2)

在as-if规则下,如果两个结果具有相同的效果,编译器可以自由地将其替换为另一个。

只有在他们给出不同结果的情况下才能说一个人比另一个人更优化。

在这种情况下,负数(可能?)在x%2下返回否定结果,并且x&1可能未定义许多整数值(或至少实现定义)。

但是如果它们定义得很好(基于有符号整数的2s补码表示),然后你在它们上评估一个if条件,那么它们再次变得等价,在这种情况下编译器可以自由地用另一个替换一个,两个都不比另一个快。

相关问题