184 votes

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

Je suis nouveau sur C # et je n’ai pas trouvé d’opérateur XNOR fournissant 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)?

314voto

Keith Thompson Points 85120

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

C'est une chose facile à manquer, car l'égalité n'est pas souvent appliquée à des valeurs booléennes. Et il y a des langues où il ne sera pas nécessairement le travail. Par exemple, en C, tous les non-zéro valeur scalaire est considérée comme vraie, de sorte que deux "vraies" valeurs peut être inégale. Mais la question a été marqué , qui a, dirons-nous, le bon comportement de booléens.

Notez également que ce n'est pas de généraliser à des opérations bit à bit, où vous souhaitez 0x1234 XNOR 0x5678 == 0xFFFFBBB3 (en supposant 32 bits). Pour cela, il faut construire à partir d'autres opérations, comme ~(A^B). (Remarque: ~, pas !.)

6voto

B1KMusic Points 1088

XOR = A ou B, mais Pas de A Et de B, ou ni l' (ne Peut pas être égal à [!=])
XNOR est donc l'exact oppoiste, et peut être facilement représentée par == ou ===.

Cependant, la non-booléenne cas, poser des problèmes, comme dans cet exemple:

a = 5
b = 1

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

au lieu de cela, utilisez ceci:

a = 5
b = 1

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

ou

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

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

le alt exemple est juste l'inverse (a || b) && !(a && b) porte (XOR)

4voto

Griffin Points 2232

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.

2voto

sll Points 30638

Non, faites-le vous-même en utilisant des opérateurs existants

 XNOR =  (A && B) || (!A && !B);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X