• [^] # Re: Autres solutions

    Posté par . En réponse au message Comment effectué une rotation de bit sur un Byte ?. Évalué à 3.

    Pour choisir parmi les nombreuses méthodes possibles, il faut savoir de quoi tu as le plus besoin.

    - si c'est la rapidité, alors il vaut mieux faire une LUT de 256 valeurs, c'est encore ce qui s'exécutera le plus vite. Par contre ca consomme un peu plus de mémoire (ca peut avoir son importance sur un petit CPU embarqué).

    - si c'est la simplicité, et la taille de code (en mémoire) qui est recherchée, la méthode par décalage est très bien.

    - certains CPU ont des instructions assembleur SWAP concues pour ca. Par contre, adieu la portabilité de ton code.

    - si on a une vraie rotation de bits (pas juste un décalage avec perte du bit qui dépasse, mais généralement ca va nous ramener aussi à de l'assembleur) on peut faire ce genre de choses :

    #define reverse_byte (byte) \
    (((byte<<1)&0x11) \
    | ((byte<<3)&0x22) \
    | ((byte>>3)&0x44) \
    | ((byte>>1)&0x88))

    Si on décompose, ca fait :
    000E 000A
    H000 D000
    00F0 00B0
    0G00 0C00
    -----------------
    HGFE DCBA

    Avantages : aucun test, aucune boucle, et on traite 2 bits à chaque fois.
    Inconvénients : les constantes (mais sur un RISC elles sont mises avec l'instruction), la rotation qui n'est pas équivalente au décalage en C

    Plus d'infos ici :
    http://www.sxlist.com/techref/microchip/math/bit/revbits.htm(...)