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

Posted

技术标签:

【中文标题】C# 中是不是有 XNOR(逻辑双条件)运算符?【英文标题】:Is there XNOR (Logical biconditional) operator in C#?C# 中是否有 XNOR(逻辑双条件)运算符? 【发布时间】:2011-10-26 14:47:20 【问题描述】:

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

a b a XNOR b ---------------- T T T 对了 F T F F F T

是否有专门的运营商来做这件事?或者我需要使用 !(A^B)?

【问题讨论】:

这个运算符通常被称为== 用于布尔操作数... @Magnus Hoff : 非常好! 我认为“只见树木不见森林”这句话在这里非常合适。投票是因为我们都来过这里一两次;) 也许是 OP iz l33t k!d 想要编写很棒的 shellcodez 并且需要以某种方式隐藏比较操作。有可能…… 对不起,Kerrek,我不是那群人。而spender就在这里-) 【参考方案1】:

XNOR 可以使用=== 运算符。 只需要将ab 转换为bool。

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

【讨论】:

只有C#没有===操作符 这个答案都不正确,=== 非强制运算符是 javascript,而在评估中的值之前的双 !! 在 c# 中也无效 如前所述,c# 没有三等号运算符。 === is not aoperator in C#...(===) is used is JavaScript.【参考方案2】:

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

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

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

【讨论】:

在 C 中,! 运算符可用于将 int 转换为“行为良好”的布尔值:!a==!b @ivan_pozdeev 和!!(这是两个逻辑“非”运算符)将任何标量值标准化为01【参考方案3】:

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是一个值)

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

这是按位的,不是逻辑的 我认为发帖人知道这一点,因为他已将其包含在他的问题中。 @sllev 你差点搞定我,我不得不仔细检查一下。在 C# 中,如果对布尔值进行操作,^ 是合乎逻辑的。如果对整数类型进行操作,它是按位的。请看msdn.microsoft.com/en-us/library/zkacc7k1.aspx @trailmax:很酷的东西,感谢您指出这一点!真是魔鬼在细节!

以上是关于C# 中是不是有 XNOR(逻辑双条件)运算符?的主要内容,如果未能解决你的问题,请参考以下文章

C#基础知识

VHDL操作符

C# 转换字符串以用于逻辑条件

带有双条件和 || 的 While 循环Swift 中的逻辑运算符

14 C#编程中的逻辑运算

JAVA笔记03日