C 使用位级别和逻辑操作写入x==y的等效值?

C 使用位级别和逻辑操作写入x==y的等效值?,c,bit-manipulation,logical-operators,C,Bit Manipulation,Logical Operators,什么是仅使用位级(&&、~、^、&)和逻辑(&&、| |、!)运算的与x==y等价的C表达式?当x和y相等时,它应该返回1,否则返回0。表达式x==y与表达式xy相等(如果x和y相等,则计算结果为真)。双条件是的倒数(如果x和y不相等,则计算结果为真),所以 x==y相当于 非(x或y) 那是 位:~(x^y) logical没有XOR,因此假设x⊕ y=(x∨ y)∧ !(十)∧ y) 逻辑:!((x|y)和&!(x&y)) 注:上述表达式在逻辑上是等价的(更好的词可能是代数?)。按位比较当

什么是仅使用位级(&&、~、^、&)和逻辑(&&、| |、!)运算的与x==y等价的C表达式?当x和y相等时,它应该返回1,否则返回0。

表达式
x==y
与表达式
xy
相等(如果x和y相等,则计算结果为真)。双条件是的倒数(如果x和y不相等,则计算结果为真),所以


x==y
相当于

非(x或y)

那是

位:
~(x^y)

logical没有XOR,因此假设x⊕ y=(x∨ y)∧ !(十)∧ y)

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


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

而您的[部分]答案/解决方案是。。?绘制所有不同情况下的TTL。不要忘记,对于整数,
=
意味着所有位都是相同的;现在只需计算出基本情况(按位),以检测一位是否相同,然后将其应用于所有位。yoo……仅供参考,它不允许您在第一(idk多少)分钟内标记答案。不管怎么说,我现在就这么做了@kpa6uk“
x==y
相当于
NOT(xxor y)
”适用于无符号整数,但一般不适用于
int
(nor FP)。这些类型可能具有具有相同算术值的不同位模式,此解决方案正在进行位模式比较+1无论如何,我相信这足以满足OP的需要。