C#中是否有XNOR(逻辑双条件)运算符?

时间:2011-08-14 00:14:19

标签: c# boolean boolean-operations

我是C#的新手,无法找到XNOR运算符来提供此真值表:

a  b    a XNOR b
----------------
T  T       T
T  F       F
F  T       F
F  F       T

这是否有特定的运营商?或者我需要使用!(A ^ B)?

4 个答案:

答案 0 :(得分:220)

XNOR只是对布尔的平等;使用A == B

这是一件容易错过的事情,因为平等并不常见于布尔人。并且有些语言不一定有效。例如,在C中,任何非零标量值都被视为true,因此两个“true”值可能不相等。但这个问题被标记为,我们应该说,这是一个表现良好的布尔人。

另请注意,这并不适用于按位运算,您需要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。 只需将ab转换为bool。

if (!!a === !!b) {...}