Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中是否存在XNOR(逻辑双条件)运算符?_C#_Boolean_Boolean Operations - Fatal编程技术网

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

C#中是否存在XNOR(逻辑双条件)运算符?,c#,boolean,boolean-operations,C#,Boolean,Boolean Operations,我是C#新手,无法找到运算符提供此真值表: a b a XNOR b ---------------- T T T T F F F T F F F T a b a XNOR b ---------------- T T T T F F F T F F F T 有专门的接线员吗?或者我需要使用!(A^B)?不,您需要使用!(A^B) 尽管我认为可以使用运算符重载来生成自己的XNOR。XNOR只是布尔上的等式;使用A==B 这是一件容易

我是C#新手,无法找到运算符提供此真值表:

a b a XNOR b ---------------- T T T T F F F T F F F T a b a XNOR b ---------------- T T T T F F F T F F F T
有专门的接线员吗?或者我需要使用!(A^B)?

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


尽管我认为可以使用运算符重载来生成自己的XNOR。

XNOR只是布尔上的等式;使用
A==B

这是一件容易忽略的事情,因为平等并不普遍适用于布尔人。有些语言不一定有用。例如,在C语言中,任何非零标量值都被视为true,因此两个“true”值可能不相等。但问题被贴上了标签,我们可以说,这是行为良好的布尔人


还要注意的是,这并没有推广到按位操作,您需要
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)){
...
}

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


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

您可以对XNOR使用
==
运算符。 只需将
a
b
转换为bool即可

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

这是按位的,不是逻辑的。我想海报知道,因为他在他的问题中包括了它。@sllev你差点抓住我,我不得不仔细检查它。在C中,如果对布尔运算,它是逻辑的。如果对整型运算,它是按位的。请看@trailmax:cool stuff,谢谢你指出这一点!真的很详细!这个运算符更像是C对于布尔操作数,我们只知道
==
。@Magnus Hoff:很好很好的观点!我认为“看不见树木的树木”这个短语在这里非常合适。投票是因为我们都来过这里一两次;)也许是OP iz l33t k!他想写很棒的shellcodez,需要隐藏比较操作。有可能…对不起,凯瑞克,我不是那种人。斯宾德就在这里-)用C,
运算符可用于将
int
转换为“行为良好”的布尔值:
!a==!b
@ivan_pozdeev和
(这是两个逻辑“not”运算符)将任何标量值规范化为
0
1
。只有C没有
===
运算符。此答案中有一个是正确的,
==
非强制运算符是javascript,双
在计算中的值在c中无效之前,如前所述,c没有三重等号运算符。==不是c中的运算符。…(===)用于JavaScript。
if (!!a === !!b) {...}