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

tra*_*max 126 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)?

Kei*_*son 233

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

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

另请注意,这并不适用于您想要的位运算0x1234 XNOR 0x5678 == 0xFFFFBBB3(假设为32位).为此,您需要从其他操作中构建,例如~(A^B).(注意:~不是!.)

  • 当然如此!!我现在觉得自己很傻 - ) (45认同)
  • 在C中,`!`运算符可用于将`int`转换为"表现良好"的布尔值:`!a ==!b`. (5认同)
  • @trailmax:不需要感到愚蠢,这是一件很容易错过的事情.(清理已纳入答案的评论.) (4认同)
  • @ivan_pozdeev 和 `!!` (这是两个逻辑“非”运算符)将任何标量值标准化为 `0` 或 `1`。 (2认同)

Bra*_*est 5

XOR = A或B,但不是A&B或都不是(不能等于[!=])
,因此XNOR是确切的对数,可以很容易地用==或===表示。

但是,非布尔型情况会出现问题,例如以下示例:

a = 5
b = 1

if (a == b){
...
}
Run Code Online (Sandbox Code Playgroud)

相反,使用以下命令:

a = 5
b = 1

if((a && b) || (!a && !b)){
...
}
Run Code Online (Sandbox Code Playgroud)

要么

if(!(a || b) && (a && b)){
...
}
Run Code Online (Sandbox Code Playgroud)

第一个示例将返回false(5!= 1),但是第二个示例将返回true(a [value?]和b [value?]的值返回相同的布尔值,即true(值=不为0 /有一个值) )

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