Y a-t-il un opérateur XNOR (Logical biconditional) dans C#?
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 c# , 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 !
.)
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"
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.
vous pouvez utiliser l'opérateur ===
pour XNOR.
Il vous suffit de convertir a
et b
en bool.
if (!!a === !!b) {...}