整数均匀度测试(% 2 vs & 1)

tks*_*tks 4 c

这两个语句是否等效编译: n % 2 == 0 和 n & 1 == 0 ?

如果不是,是否有效率更高?

caf*_*caf 6

不,它们并不总是给出相同的结果。C 标准允许使用补码实现,在这种情况下,它们将为负数给出不同的结果n


Ben*_*oit 5

昨天有人问了类似的问题。

i % 2并且i & 1不一样:

  • 如果您的整数不是无符号的,则根据其表示形式,n & 1不一定表明您的整数是偶数还是奇数。
  • i % 2可以是负数。

对于无符号整数,一个好的编译器应该合理地生成同样有效的代码。