哪种方法可以确定两个数字是否具有相同的奇偶校验?

时间:2017-11-22 21:22:16

标签: c++ numbers parity

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

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

if (a%2 == b%2)

问题在于,第一个案例适用于100%的案例,第二个案例仅适用于80%的案例(我在网站上提交的问题的测试),我不明白为什么。对我来说,两行代码都适用于所有情况。有人可以解释一下,为什么第一行代码在所有情况下都有效,而第二行却没有?您会推荐哪种方法(由我或其他人展示)?

1 个答案:

答案 0 :(得分:4)

我不推荐你帖子中的任何一种方法,你应该使用其中一种方法:

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的事实,即使是负数。尽可能避免整数除法(和模数),它是任何CPU上最慢的指令之一。