Je suis nouveau en C # et je n'ai pas pu trouver l' opérateur XNOR pour fournir cette table de vérité:
aba XNOR b ---------------- TTT TFF FTF FFT
Y a-t-il un opérateur spécifique pour cela? Ou j'ai besoin d'utiliser! (A ^ B)?
Je suis nouveau en C # et je n'ai pas pu trouver l' opérateur XNOR pour fournir cette table de vérité:
aba XNOR b ---------------- TTT TFF FTF FFT
Y a-t-il un opérateur spécifique pour cela? Ou j'ai besoin d'utiliser! (A ^ B)?
Réponses:
XNOR est simplement l'égalité sur les booléens; utiliser A == B
.
C'est une chose facile à manquer, car l'égalité n'est pas couramment appliquée aux booléens. Et il y a des langues où cela ne fonctionnera pas nécessairement. Par exemple, en C, toute valeur scalaire non nulle est traitée comme vraie, donc deux valeurs «vraies» peuvent être inégales. Mais la question a été étiquetéec #, 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 du bit, où vous le souhaitez 0x1234 XNOR 0x5678 == 0xFFFFBBB3
(en supposant 32 bits). Pour cela, vous devez construire à partir d'autres opérations, comme ~(A^B)
. (Remarque: ~
non !
.)
!
opérateur peut être utilisé pour convertir int
« est à « bien comportés » booléens: !a==!b
.
!!
(c'est deux opérateurs logiques "non") normalise toute valeur scalaire à 0
ou 1
.
XOR = A ou B, mais pas A & B ou ni l'un ni l'autre (ne peut être égal [! =])
XNOR est donc l'oppoiste exact, 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 le second retournera true (les valeurs de a [valeur?] et b [valeur?] renvoient le même booléen, true (valeur = pas 0 / il y a une valeur )
l'exemple alt est juste la porte inversée (a || b) &&! (a && b) (XOR)
Non, vous devez utiliser !(A^B)
Bien que je suppose que vous pourriez utiliser la surcharge d'opérateurs pour créer votre propre XNOR.
Vous pouvez utiliser l' ===
opérateur pour XNOR. Il vous suffit de convertir a
et b
de booléen.
if (!!a === !!b) {...}
===
opérateur
===
l'opérateur non coercitif est javascript et le double !!
avant une valeur dans une évaluation n'est pas non plus valide en c #
==
d'opérandes booléens ...