繁体   English   中英

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

[英]Is there XNOR (Logical biconditional) operator in C#?

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

a  b    a XNOR b
----------------
T  T       T
T  F       F
F  T       F
F  F       T

有专门的运营商吗? 还是我需要使用?(A^B)?

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

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

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

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)? 但第二个将返回真(a[value?] 和 b[value,] 的值返回相同的布尔值,真(值 = 非 0/有值)

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

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

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

在整个讨论中,我认为有一些按位操作不是常规操作。 即使在 c 中,追加或插入到字符串的末尾,在标准 IO 和数学库中都很熟悉。 这就是我认为问题出在 not 和 Xnor 的地方,不熟悉 python 但我提出以下示例

function BitwiseNor(a as integer) l as string l=str(a) s as string For i=len(l) to 0 s=(str(i)+"="+Bin(i)) //使用字符串在这个例子中,因为在语言中不存在二进制或以 2 为底的数字,所以我接下来使用了 endfunction s

function BitwiseXNor(a as integer,b as integer) r as integer d as integer c as string c=str(BitwiseOr(a,b)) r=(val(c,2)) //the number to in this conversion is基数值 endfunction r

您可以对 XNOR 使用===运算符。 只需要将ab转换为布尔值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM