设a
、b
为不同值的正整数。有什么办法可以简化这些表达式:
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/