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 可以使用===
运算符。
只需要将a
和b
转换为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 和!!
(这是两个逻辑“非”运算符)将任何标量值标准化为0
或1
。【参考方案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(逻辑双条件)运算符?的主要内容,如果未能解决你的问题,请参考以下文章