【问题标题】: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就在这里-)

标签: c# boolean boolean-operations


【解决方案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 中,任何非零标量值都被视为真,因此两个“真”值可能不相等。但是这个问题被标记为,我们应该说,它具有良好的布尔值。

另请注意,这并不能推广到您想要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:很酷的东西,感谢您指出这一点!真是魔鬼在细节!
    猜你喜欢
    • 2011-12-31
    • 2012-02-15
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多