Qual è il modo più semplice per eseguire un OR esclusivo a tre vie?XOR di tre valori
In altre parole, ho tre valori e desidero una dichiarazione che valuti solo il vero IFF uno dei tre valori è vero uno.
Finora, questo è quello che è venuta in mente:
(! (A^b) & & (a^c) & & (b & & c)) || ((b^a) & & (b^c) & &! (a & & c)) || ((C^a) & & (c^b) & &! (Un & & b))
C'è qualcosa di più semplice per fare la stessa cosa?
ecco la prova che quanto sopra compie il compito:
a = true; b = true; c = true
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> false
a = true; b = true; c = false
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> false
a = true; b = false; c = true
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> false
a = true; b = false; c = false
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> true
a = false; b = true; c = true
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> false
a = false; b = true; c = false
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> true
a = false; b = false; c = true
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> true
a = false; b = false; c = false
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> false
Grande, ma la soluzione generale non lo fa corto circuito. – Ani
'a? 1: 0' può essere semplificato in '!! a' – kaspersky
@ gg.kaspersky, solo in JavaScript, C e lingue che hanno test di verità/falsità tramite l'operatore'! '. Ad esempio, questo non funzionerebbe in Java o C#. –