就速度而言,速度最快,为什么?
x&1 //checks last bit
或
x%2 // performs modulo operation
答案 0 :(得分:2)
在as-if规则下,如果两个结果具有相同的效果,编译器可以自由地将其替换为另一个。
只有在他们给出不同结果的情况下才能说一个人比另一个人更优化。
在这种情况下,负数(可能?)在x%2
下返回否定结果,并且x&1
可能未定义许多整数值(或至少实现定义)。
但是如果它们定义得很好(基于有符号整数的2s补码表示),然后你在它们上评估一个if
条件,那么它们再次变得等价,在这种情况下编译器可以自由地用另一个替换一个,两个都不比另一个快。