Sono nuovo in C # e non sono riuscito a trovare l' operatore XNOR per fornire questa tabella di verità:
aba XNOR b ---------------- TTT TFF FTF FFT
Esiste un operatore specifico per questo? O devo usare! (A ^ B)?
Sono nuovo in C # e non sono riuscito a trovare l' operatore XNOR per fornire questa tabella di verità:
aba XNOR b ---------------- TTT TFF FTF FFT
Esiste un operatore specifico per questo? O devo usare! (A ^ B)?
Risposte:
XNOR è semplicemente uguaglianza con i booleani; usare A == B
.
Questa è una cosa facile da perdere, poiché l'uguaglianza non è comunemente applicata ai booleani. E ci sono lingue in cui non funzionerà necessariamente. Ad esempio, in C, qualsiasi valore scalare diverso da zero viene trattato come vero, quindi due valori "veri" possono essere disuguali. Ma la domanda è stata taggatac #, che ha, diciamo, booleani ben educati.
Si noti inoltre che ciò non generalizza alle operazioni bit a bit, dove si desidera 0x1234 XNOR 0x5678 == 0xFFFFBBB3
(presupponendo 32 bit). Per questo, è necessario costruire da altre operazioni, come ~(A^B)
. (Nota: ~
no !
.)
!
operatore può essere utilizzato per convertire int
's per booleani 'ben educati': !a==!b
.
!!
(ovvero due operatori "non" logici) normalizza qualsiasi valore scalare a 0
o 1
.
XOR = A o B, ma non A & B o nessuno dei due (non può essere uguale [! =])
XNOR è quindi l'esatto oppoiste e può essere facilmente rappresentato da == o ===.
Tuttavia, i casi non booleani presentano problemi, come in questo esempio:
a = 5
b = 1
if (a == b){
...
}
invece usa questo:
a = 5
b = 1
if((a && b) || (!a && !b)){
...
}
o
if(!(a || b) && (a && b)){
...
}
il primo esempio restituirà false (5! = 1), ma il secondo restituirà true (a [valore?] e b [valore?] i valori restituiscono lo stesso valore booleano, vero (valore = non 0 / c'è un valore )
l'esempio alt è solo la porta invertita (a || b) &&! (a && b) (XOR)
No, devi usare !(A^B)
Anche se suppongo che potresti usare il sovraccarico dell'operatore per creare il tuo XNOR.
È possibile utilizzare l' ===
operatore per XNOR. Hai solo bisogno di convertire a
e b
bool.
if (!!a === !!b) {...}
===
operatore
===
l'operatore non coercitivo è javascript e il doppio !!
prima che un valore in una valutazione non sia valido neanche in c #
==
operandi booleani ...