c++ - 简化这个表达式

标签 c++ c expression

ab为不同值的正整数。有什么办法可以简化这些表达式:

bool foo(unsigned a, unsigned b)
{
    if (a % 2 == 0)
      return (b % 2) ^ (a < b); // Should I write "!=" instead of "^" ?
    else      
      return ! ( (b % 2) ^ (a < b) ); // Should I write "(b % 2) == (a < b)"? 
}

我将返回值解释为 bool 值。

最佳答案

有什么区别
 (a%2)^(b%2)^(a<b)

这又是

 ((a^b)&1)^(a<b)

或者,确实

 ((a ^ b) & 1) != (a < b)

编辑补充:再想一想,这只是(a-b)的第一位和最后一位的异或(如果你使用2的补码),所以可能有一个特定于机器的 ASM 序列更快,涉及旋转指令。

关于c++ - 简化这个表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13258782/

相关文章:

c++ - Visual Studio 2010 c++ 编译器问题

c - 切换 MSB 的最佳方式是什么?

c++ - 将 byte[] 数组作为方法的多个参数传递

c# - 如何将一个表达式包含在另一个表达式中?

c++ - 逻辑/关系表达式优化

c++ - 如何在 C++ 中将 yuy2 转换为 BITMAP

c++ - 将元素插入链表

r - 如何从字符串创建带引号的表达式

c++ - 如何在我的 C 版 Tic Tac Toe 中修复我的输入验证?

java - 为什么默认不检查溢出