Y a-t-il un opérateur XNOR (Logical biconditional) dans C#?

je suis nouveau à C# et ne pouvais pas trouver XNOR opérateur pour fournir cette table de vérité:

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

Est-il un opérateur spécifique pour cela? Ou j'ai besoin de l'utiliser !(A^B)?

108
demandé sur trailmax 2011-08-14 04:14:19

4 réponses

XNOR est tout simplement l'égalité sur booléens; utiliser A == B .

c'est une chose facile à manquer, puisque l'égalité n'est pas couramment appliquée aux booléens. Et il y a des langues où ça ne marchera pas nécessairement. Par exemple, en C, toute valeur scalaire non nulle est traitée comme vraie, de sorte que deux valeurs "vraies" peuvent être inégales. Mais la question a été étiquetée , qui a, disons, des booléens bien comportés.

noter également que ce ne généralise pas aux opérations bitwise, où vous voulez 0x1234 XNOR 0x5678 == 0xFFFFBBB3 (en supposant 32 bits). Pour cela, il faut construire à partir d'autres opérations, comme ~(A^B) . (Note: ~ , pas ! .)

199
répondu Keith Thompson 2012-02-07 00:59:12

XOR = A ou B, Mais Pas A & B ou ni l'un ni l'autre (ne peut être égal [!= ])

XNOR est donc l'exact opposé, et peut être facilement représenté par == ou ===.

cependant, les cas non-booléens présentent des problèmes, comme dans cet exemple:

a = 5
b = 1

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

à la place, Utilisez ceci:

a = 5
b = 1

if((a && b) || (!a && !b)){
...
}

ou

if(!(a || b) && (a && b)){
...
}

le premier exemple retournera false (5 != 1), mais la seconde reviendra vrai ([valeur?] et b[valeur?]'s les valeurs de retour de la même valeur booléenne, true (valeur = 0/y est une valeur)

alt exemple est juste l'inverse (a || b) && !(a && b) (XOR) "à la porte de 151960920"

4
répondu Braden Best 2012-01-28 20:55:41

Non, vous devez utiliser !(A^B)

bien que je suppose que vous pourriez utiliser la surcharge de l'opérateur pour faire votre propre XNOR.

2
répondu Griffin 2011-08-14 00:16:29

vous pouvez utiliser l'opérateur === pour XNOR. Il vous suffit de convertir a et b en bool.

if (!!a === !!b) {...}
-5
répondu user7797323 2017-03-31 11:06:11