157

我是 C# 新手,找不到XNOR运算符来提供这个真值表:

aba XNOR b
----------------
TTT
TFF
FTF
快速傅里叶变换

有专门的运营商吗?或者我需要使用!(A^B)?

4

4 回答 4

284

XNOR 只是布尔值的相等;使用A == B.

这很容易被忽略,因为相等性通常不应用于布尔值。并且有些语言不一定有效。例如,在 C 中,任何非零标量值都被视为真,因此两个“真”值可能不相等。但是这个问题被标记为,我们应该说,它具有良好的布尔值。

另请注意,这并不能推广到您想要的按位运算0x1234 XNOR 0x5678 == 0xFFFFBBB3(假设为 32 位)。为此,您需要从其他操作(例如~(A^B). (注:~,不是!。)

于 2011-08-14T00:22:23.920 回答
6

XOR = A 或 B,但不是 A & B 或两者都不是(不能相等 [!=])
因此 XNOR 是完全相反的,并且可以很容易地用 == 或 === 表示。

但是,非布尔值会出现问题,如下例所示:

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 is a value )

alt 示例只是反转的 (a || b) && !(a && b) (XOR) 门

于 2012-01-28T20:48:00.897 回答
3

不,您需要使用!(A^B)

虽然我想你可以使用运算符重载来制作你自己的 XNOR。

于 2011-08-14T00:16:29.150 回答
-9

您可以将===运算符用于 XNOR。只是你需要转换ab布尔。

if (!!a === !!b) {...}
于 2017-03-31T11:06:11.150 回答