什么是等效于x == y的C表达式,它只使用位级(|,〜,^,&)和逻辑(&&,||,!)操作?当x和y相等时它应该返回1,否则返回0。
答案 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++
运算符的对象,则会在==
中出现同样的问题。逻辑版本的问题是,如果x
和y
不是相同的变量类型,则可能会发生类型强制。