« Les opérations bit à bit/Les subtilités du XOR » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 15 :
</source>
 
Mais il est possible d'échanger les valeurs de deux registres/variables, sans utiliser de registre/variable temporaire ! Pour cela, il existe différentes méthodes assez simplesimples. La première méthode alternative qui utilise des additions et soustractions. Il faut effectuer ces opérations dans l'ordre suivant :
 
* <math>A = A + B</math> ;
* <math>B = A - B</math>;
* <math>A = A - B</math>.
 
Cependant, il y a un risque de débordement au niveau de l'addition. Cette technique utilise de plus des opérations arithmétiques, qui sont plus lentes que les opérations logiques sur de nombreux processeurs.
 
===Stupid XOR trick===
 
LaUne premièreautre méthode se base sur les particularités de l'instruction XOR et est connue sous le nom de '''stupid XOR trick''' chez nos amis anglo-saxons. Il est en effet possible d'échanger le contenu de deux registres/variables A et B en effectuant les opérations suivante, dans l'ordre :
 
* <math>A = A \oplus B</math> ;
Ligne 105 ⟶ 111 :
 
Comme on le voit, nos données ont bien étés inversées.
 
===Add Swap===
 
Il existe une seconde méthode, similaire à la précédente, mais qui utilise des additions et soustractions. Il faut effectuer ces opérations dans l'ordre suivant :
 
* <math>A = A + B</math> ;
* <math>B = A - B</math>;
* <math>A = A - B</math>.
 
Cependant, il y a un risque de débordement au niveau de l'addition. Cette technique utilise de plus des opérations arithmétiques, qui sont plus lentes que les opérations logiques sur de nombreux processeurs.
 
{{autocat}}