pages

2 févr. 2017

Rotation en C

Il est facile de faire un décalage vers la gauche ou vers la droite à l'aide des opérateurs
 "<< et >>", mais rien pour une faire une rotation et pourtant c'est simple.

Explication :


Effectuer une rotation (de 1 vers la droite) par l'exemple :

      A = 01010101 devient après rotation  A = 10101010

l'opération consiste à faire (dans notre exemple) un décalage de 1 vers la droite et d'affecter la valeur du bit 0  au bit 7.

Pour cela rien de plus simple, il suffit d'appliquer :   A = (A >> 1) | (A << 7) 

    décalage de 1  vers la droite donne   : 00101010
    décalage de 7 vers la gauche donne : 10000000
                                                                 --------------
    le résultat de l'opération "ou (or)" est :  10101010 

Petit rappel l'opération A >> 1 ne modifie pas la valeur de A ce qui permet d'effectuer l'opération suivante A << 7 sans problème.

Il est possible de faire un décalage vers la gauche ou vers la droite et de choisir le nombre de rotation quelque soit le type de variable (byte, word, ....).

La formule générale est :

A = (A >> x) | (A << nb bits variable - x)

ou


A = (A << x) | (A >> nb bits variable - x)



avec "A" la variable, "x" le nombre de rotations et "nb bits variable" le nombre de bits de la variable (8, 16, ....).

Exemples :

P = (P >> 4) | (P << 4)       variable 8 bits et 4 rotations vers la droite

P = (P << 8) | (P >> 8)       variable 16 bits et 8 rotations vers la gauche

Le C mais c'est très simple !

Aucun commentaire:

Enregistrer un commentaire