这是确定两个数字是否具有相同奇偶校验的正确方法

Which is the correct way to determine if two numbers have the same parity?

本文关键字:奇偶 方法 偶校验 数字 两个 是否      更新时间:2023-10-16

我找到了两个解决方案,以找出两个数字是否具有相同的奇偶校验(均为奇数或均为奇数)。在C 中,它们看起来像这样:

if ((a+b)%2 == 0)

if (a%2 == b%2)

问题是,第一个在100%的案件中起作用,而第二个案件仅处理80%的案件(我在网站上提交的问题的测试),我不明白为什么。对我来说,两行代码在所有情况下均应正常。有人可以向我解释为什么第一行代码在所有情况下都起作用,而第二行则不起作用?您会推荐哪种方法(我或其他方法)?

我不建议您帖子中的任何一种方法,您应该使用其中一种:

if ((a & 1) == (b & 1)) {} // this is clearer
if (((a ^ b) & 1) == 0) {} // this is faster
if (!((a ^ b) & 1)) {}     // this is as fast as faster

这些取决于以下事实:即使否定值,位0也将设置为奇数。尽可能避免整数划分(和modulo),这是任何CPU上最慢的说明之一。