Site original : le hollandais volant
Voir :
On peut inverser deux variables sans utiliser de variables intermédiaires. Généralement c’est fait avec deux additions et une soustraction. Mais on peut aussi utiliser 3 "XOR" de suite. Ce lien tente d’expliquer ça de façon visuelle.
Je connaissais l’astuce, mais je ne trouve pas ça très parlant : les images ne sont pas expliquées.
Je pense que je préfère la version avec les bit, que j’explique ci-dessous :
Pour rappel, le XOR est la contraction de « x-or » ou « eXclusive-or », soit le ou-exclusif en français.
Il s’agit d’une opération qui prend deux entrées et offre une sortie : la sortie est à 1 si l’une des entrées seulement est à 1. Dans les autres cas, c’est 0.
Donc, prenant le format A xor B = C :
0 xor 0 = 0 // il n’y a aucun 1, donc le résultat est 0.
0 xor 1 = 1 // il y a un 1 et un seul, donc le résultat est 1.
1 xor 0 = 1 // il y a un 1 et un seul, donc le résultat est 1.
1 xor 1 = 0 // il y a deux 1, donc le résultat est 0.
1 1 0 0
xor 1 0 1 0
↓ ↓ ↓ ↓
0 1 1 0
1100 xor 1010
, ça fait : 0110
.a
et b
:var a = 1100
var b = 1010
var a = 1100
var b = 1010
// Puis on fait :
var c = a
a = b
b = c
// ici donc on a a=1010 et b=1100, donc le résultat voulu.
var a = 1100
var b = 1010
a = a xor b
b = b xor a
a = a xor b
// maintenant on a a=1010 et b=1100
var a = 1100
var b = 1010
a = a xor b
// a devient "a xor b", donc "1100 xor 1010", c’est à dire "0110"
b = b xor a
// b devient "b xor a" donc "1010 xor 0110" (la nouvelle valeur de a), soit "1100"
a = a xor b
// a devient "a xor b" donc "0110 xor 1100", soit "1010"