web-dev-qa-db-fra.com

Existe-t-il un opérateur XNOR (biconditional logique) en C #?

Je suis nouveau sur C # et je n'ai pas trouvé ([~ # ~] xnor [~ # ~] opérateur pour fournir cette table de vérité:

 aba XNOR b 
 ---------------- 
 TTT 
 TFF 
 FTF 
 FFT 

Existe-t-il un opérateur spécifique pour cela? Ou j'ai besoin d'utiliser! (A ^ B)?

122
trailmax

XNOR est simplement l'égalité sur les booléens; utilisez A == B.

C'est une chose facile à manquer, car l'égalité n'est pas communément appliquée aux booléens. Et il y a des langues où ça ne marchera pas forcément. Par exemple, en C, toute valeur scalaire non nulle est traitée comme vraie, ainsi deux valeurs "vraies" peuvent être inégales. Mais la question a été étiquetée c # , ce qui a, dirons-nous, des booléens bien élevés.

Notez également que cela ne se généralise pas aux opérations au niveau des bits, où vous voulez 0x1234 XNOR 0x5678 == 0xFFFFBBB3 (En supposant 32 bits). Pour cela, vous devez vous construire à partir d'autres opérations, comme ~(A^B). (Remarque: ~, Pas !.)

228
Keith Thompson

XOR = A ou B, mais ni A & B ni ni l'un ni l'autre (ne peut être égal [! =])
XNOR est donc l’opposition exacte 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){
...
}

utilisez plutôt ceci:

a = 5
b = 1

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

ou

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

le premier exemple renverra faux (5! = 1), mais le second renverra vrai (les valeurs de a [valeur?] et b [valeur?] renverront le même booléen, vrai (valeur = pas 0/il y a une valeur )

l'exemple alt est simplement la porte inversée (a || b) &&! (a && b) (XOR)

4
Braden Best

Non, vous devez utiliser !(A^B)

Bien que je suppose que vous puissiez utiliser la surcharge d’opérateurs pour créer votre propre XNOR.

2
Griffin