Tud*_*țan 5 c++ numbers parity
我找到了两个解决方案来确定两个数字是否具有相同的奇偶校验(都是奇数或都是偶数)。在 C++ 中,它们看起来像这样:
if ((a+b)%2 == 0)
Run Code Online (Sandbox Code Playgroud)
和
if (a%2 == b%2)
Run Code Online (Sandbox Code Playgroud)
问题是第一个适用于 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
Run Code Online (Sandbox Code Playgroud)
这些取决于位 0 将为奇数设置的事实,即使是负数。尽可能避免整数除法(和取模),它是任何 CPU 上最慢的指令之一。