• # Autres solutions

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

    La fonction reverse doit fonctionner mieux que la solution proposee precedemment. Tous les processeurs n'ont pas forcement d'instructions pour faire un decalage de plusieurs positions (a gauche ou a droite).

    Par contre j'ai aucune idee des performances de la fonction reverse2, j'ai juste trouve que c'etait marrant.

    unsigned char reverse (unsigned char x)
    {
    int i;
    unsigned char r = 0;
    for (i = 0; i < 8; i++) {
    r = (r << 1) | (x & 1);
    x >>= 1;
    }
    return(r);
    }

    unsigned char reverse2 (unsigned char x)
    {
    unsigned char rev[] = { 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10,
    0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01 };
    int i;
    unsigned char r = 0;
    for (i = 0; i < 16; i += 2) {
    r |= rev[i + (x & 1)];
    x >>= 1;
    }
    return(r);
    }

    main()
    {
    int i;
    printf("reverse:\n");
    for (i = 0; i < 8; i++) {
    unsigned char x = 1 << i;
    printf("%02x -> %02x\n", x, reverse(x));
    }

    printf("reverse2:\n");
    for (i = 0; i < 8; i++) {
    unsigned char x = 1 << i;
    printf("%02x -> %02x\n", x, reverse2(x));
    }
    }