使用位写入x == y的等价物
什么是与x == y相等的C表达式,它只使用位级(|,〜,^,&)和逻辑(&&,|| ,!)操作? 当x和y相等时它应该返回1,否则返回0。
表达式x==y
等价于逻辑双条件表达式x<->y
(如果x和y相等,则计算结果为true)。 双条件是排他或(如果x和y不等价,则评估为真)的逆,如此
x==y
等价于
NOT(x XOR y)
这是
位: ~(x^y)
逻辑不具有XOR ,因此假设x⊕y =(x∨y)∧!(x∧y)
逻辑: !((x || y) && !(x && y))
注意:上面的表达式是逻辑上的(一个更好的词可能是代数的?)等价。 按位比较当然只是看每一个比特。 正如@chux指出的那样,如果2个数字在算术上等价,但是具有不同的位模式,这可能会带来意想不到的结果。 如果您正在比较覆盖了==
运算符的对象,那么在C++
会出现同样的问题。 对于逻辑版本来说,如果x
和y
不是相同的变量类型,那么可能会发生类型强制转换。