Ich bin neu in C # und konnte keinen XNOR- Operator finden, der diese Wahrheitstabelle bereitstellt:
aba XNOR b ---------------- TTT TFF FTF FFT
Gibt es dafür einen bestimmten Operator? Oder muss ich verwenden! (A ^ B)?
Ich bin neu in C # und konnte keinen XNOR- Operator finden, der diese Wahrheitstabelle bereitstellt:
aba XNOR b ---------------- TTT TFF FTF FFT
Gibt es dafür einen bestimmten Operator? Oder muss ich verwenden! (A ^ B)?
Antworten:
XNOR ist einfach Gleichheit auf Booleschen Werten. verwenden A == B
.
Dies ist leicht zu übersehen, da Gleichheit normalerweise nicht auf Boolesche Werte angewendet wird. Und es gibt Sprachen, in denen es nicht unbedingt funktioniert. In C wird beispielsweise jeder Skalarwert ungleich Null als wahr behandelt, sodass zwei "wahre" Werte ungleich sein können. Aber die Frage wurde markiertc #, die, sollen wir sagen, gut erzogene Boolesche Werte hat.
Beachten Sie auch, dass dies nicht auf bitweise Operationen verallgemeinert wird, bei denen Sie möchten 0x1234 XNOR 0x5678 == 0xFFFFBBB3
(unter der Annahme von 32 Bit). Dafür müssen Sie aus anderen Operationen aufbauen, wie z ~(A^B)
. (Hinweis: ~
nicht !
.)
!
Operator verwendet werden, um int
's in "gut erzogene" Boolesche Werte zu konvertieren : !a==!b
.
!!
(das sind zwei logische "Nicht" -Operatoren) normalisiert jeden Skalarwert auf 0
oder 1
.
XOR = A oder B, aber nicht A & B oder keines (Kann nicht gleich sein [! =])
XNOR ist daher der genaue Gegner und kann leicht durch == oder === dargestellt werden.
Nicht-boolesche Fälle stellen jedoch Probleme dar, wie in diesem Beispiel:
a = 5
b = 1
if (a == b){
...
}
Verwenden Sie stattdessen Folgendes:
a = 5
b = 1
if((a && b) || (!a && !b)){
...
}
oder
if(!(a || b) && (a && b)){
...
}
Das erste Beispiel gibt false zurück (5! = 1), das zweite gibt true zurück (a [Wert?] und b [Wert?]. Die Werte geben den gleichen Booleschen Wert zurück, true (Wert = nicht 0 / es gibt einen Wert) )
Das alte Beispiel ist nur das umgekehrte (a || b) &&! (a && b) (XOR) Gatter
Nein, Sie müssen verwenden !(A^B)
Ich nehme an, Sie könnten die Operatorüberladung verwenden, um Ihr eigenes XNOR zu erstellen.
Sie können den ===
Operator für XNOR verwenden. Sie müssen nur konvertieren a
und b
boolen.
if (!!a === !!b) {...}
===
Operator
===
der nicht erzwungene Operator ist Javascript und das Double !!
vor einem Wert in einer Bewertung ist auch in c # nicht gültig
==
für boolesche Operanden ...