Quelle est la manière la plus simple de faire un OR exclusif à trois voies? En d'autres termes, j'ai trois valeurs, et je veux une déclaration qui évalue à vrai IFF seulement un des trois valeurs est vrai.XOR de trois valeurs
Jusqu'à présent, ce que je suis venu avec:
(! (A^b) & & (a^c) & & (b & & c)) || ((b^a) & (b^c) & &! (un & & c)) || ((C^a) & & (c^b) & &! (Un & & b))
Y at-il quelque chose de simple à faire la même chose?
est ici la preuve que le ci.dessus fait:
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
Grand, mais la solution générale ne fait pas de court-circuit. – Ani
'a? 1: 0' peut être simplifié à '!! a' – kaspersky
@ gg.kaspersky, seulement en JavaScript, C, et les langages qui ont des tests de vérité/fausseté via l'opérateur'! '. Par exemple, cela ne fonctionnerait pas en Java ou C#. –