我是C#的新手,无法找到XNOR运算符来提供此真值表:
a b a XNOR b ---------------- T T T T F F F T F F F T
这是否有特定的运营商?或者我需要使用!(A ^ B)?
答案 0 :(得分:220)
XNOR只是对布尔的平等;使用A == B
。
这是一件容易错过的事情,因为平等并不常见于布尔人。并且有些语言不一定有效。例如,在C中,任何非零标量值都被视为true,因此两个“true”值可能不相等。但这个问题被标记为c#,我们应该说,这是一个表现良好的布尔人。
另请注意,这并不适用于按位运算,您需要0x1234 XNOR 0x5678 == 0xFFFFBBB3
(假设为32位)。为此,您需要从其他操作构建,例如~(A^B)
。 (注意:~
,而不是!
。)
答案 1 :(得分:4)
XOR = A或B,但不是A& B或两者(不能相等[!=])
因此,XNOR是精确的oppoiste,可以很容易地用==或===表示。
但是,非布尔情况会出现问题,例如:
a = 5
b = 1
if (a == b){
...
}
相反,请使用:
a = 5
b = 1
if((a && b) || (!a && !b)){
...
}
或
if(!(a || b) && (a && b)){
...
}
第一个例子将返回false(5!= 1),但第二个将返回true(a [value?]和b [value?]的值返回相同的布尔值,true(value = not 0 / there)是一个值)
alt示例只是反转(a || b)&& !(a&& b)(XOR)门
答案 2 :(得分:2)
不,您需要使用!(A^B)
虽然我认为您可以使用运算符重载来创建自己的XNOR。
答案 3 :(得分:-6)
您可以将===
运算符用于XNOR。
只需将a
和b
转换为bool。
if (!!a === !!b) {...}