这是确定两个数字是否具有相同奇偶校验的正确方法
Which is the correct way to determine if two numbers have the same parity?
我找到了两个解决方案,以找出两个数字是否具有相同的奇偶校验(均为奇数或均为奇数)。在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上最慢的说明之一。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 此代码如何计算数字的奇偶校验?
- 按奇偶校验对数组进行排序 结果并不可靠
- 这是确定两个数字是否具有相同奇偶校验的正确方法
- 并行计算奇偶校验
- 串行端口奇偶校验检查在升压 asio 中失败
- 将C++串口奇偶校验更改代码从 Linux 移植到 Windows
- 文件大小方法提高了库的奇性
- 有效地检查整数的奇偶性
- 这个代码如何使用64位乘法和模除法计算字节的奇偶校验
- 在 int 变量中查找 '1 数的奇偶校验
- 是否可以使用boost.asio实现标记和空间奇偶校验?
- 十进制奇偶校验
- CRC/奇偶校验/汉明保护16位并行总线
- 在c++中实现多维数组奇维的最佳方法