使用位级和逻辑运算写出x == y的等价物?

时间:2014-10-16 05:12:28

标签: c bit-manipulation logical-operators

什么是等效于x == y的C表达式,它只使用位级(|,〜,^,&)和逻辑(&&,||,!)操作?当x和y相等时它应该返回1,否则返回0。

1 个答案:

答案 0 :(得分:3)

表达式x==y等同于logical biconditional表达式x<->y(如果x和y等效,则计算结果为true)。双条件是exclusive or的倒数(如果x和y不相等,则求值为true),所以

x==y相当于

NOT(x XOR y)

位:~(x^y)

逻辑没有 XOR ,所以假设x⊕y=(x∨y)∧!(x∧y)

逻辑:!((x || y) && !(x && y))

注意:以上表达式逻辑(一个更好的词可能代数?)等价。按位比较当然只是看每一位。正如@chux所指出的,如果2个数字在算术上是等价的,但是具有不同的位模式,这可能会产生意外的结果。如果您要比较已覆盖C++运算符的对象,则会在==中出现同样的问题。逻辑版本的问题是,如果xy不是相同的变量类型,则可能会发生类型强制。