Flipping
Le retournement d'octet et le retournement de mot permettent d'échanger des octets ou des mots. Techniquement, cela fonctionne comme suit :
Disons que nous avons une valeur de deux octets (hexadécimale) : 0x3344
Le nombre est composé de deux octets, le plus bas est 0x44, et le plus haut est 0x33, alors mettons-les dans deux cellules imaginaires d'un octet :
[33][44]
Maintenant, retournez les cellules :
[44][33]
Par conséquent, la valeur inversée de l'octet sera 0x4433.
Il en va de même pour les mots, un mot étant constitué de deux octets. Supposons que nous ayons une valeur de deux mots : 0x12345678
Divisez-les en deux cellules imaginaires, contenant maintenant un mot (2 octets) chacune :
[1234][5678]
Maintenant, retournez les cellules :
[5678][1234]
Par conséquent, la valeur du mot inversé sera 0x56781234.
Déplacement
Le décalage déplace les valeurs par bit. Qu'est-ce que cela signifie ?
Prenons un nombre décimal très simple : 5. Puis, convertissons-le en sa représentation binaire : 101 Puis, déplaçons-le vers la gauche de 1 :
[101] << [1010]
En fait, nous avons déplacé toute la séquence binaire d'une position vers la gauche et rempli l'espace vide avec un zéro.
Maintenant, faites la même chose, mais en déplaçant la droite :
[101] >> [010]
notre nombre est de 10 maintenant. Le 1 inférieur est perdu en se décalant vers la droite. Le zéro à gauche est juste pour l'affichage et n'a pas de valeur. // Techniquement, il y a un drapeau CPU qui indique que le bit a été perdu, mais il n'est pas pertinent pour la calculatrice.
Rotation
La rotation fonctionne absolument comme le décalage, à une exception près : les bits ne sont jamais perdus. Ainsi, nous prenons la même valeur décimale 5 et sa représentation binaire 101. Puis nous la faisons pivoter vers la droite dans un octet :
[00000101] ROR [10000010]
Comme vous pouvez le voir, le [1] qui a été perdu lors du décalage vers la droite a été reporté au début de notre octet.
De même pour le décalage vers la gauche, effectuons une série de rotations d'un bit vers la gauche jusqu'à ce que nous ayons un bit de report :
[00000101] ROL [00001010]
[00001010] ROL [00010100]
[00010100] ROL [00101000]
[00101000] ROL [01010000]
[01010000] ROL [10100000]
[10100000] ROL [01000001]