Dupliquer possible:
C bits inversés en entier non signé
Comment puis-je inverser un nombre binary uniquement à l’aide d’opérateurs binarys?
Par exemple:
11100000 -> 00000111 00110100 -> 00101100 00111111 -> 11111100
Pour ce genre de chose, je vous recommande de jeter un coup d’œil à la page géniale Bit Twiddling Hacks .
Voici un exemple de solution tiré de cette page:
Inverser les bits dans un octet avec 3 opérations (multiplication de 64 bits et division de module)
unsigned char b; // reverse this (8-bit) byte b = (b * 0x0202020202ULL & 0x010884422010ULL) % 1023;
Et comme indiqué dans les commentaires, voici une autre option:
Inverser une quantité de N bits en parallèle dans des opérations de 5 * lg (N)
unsigned int v; // 32-bit word to reverse bit order // swap odd and even bits v = ((v >> 1) & 0x55555555) | ((v & 0x55555555) << 1); // swap consecutive pairs v = ((v >> 2) & 0x33333333) | ((v & 0x33333333) << 2); // swap nibbles ... v = ((v >> 4) & 0x0F0F0F0F) | ((v & 0x0F0F0F0F) << 4); // swap bytes v = ((v >> 8) & 0x00FF00FF) | ((v & 0x00FF00FF) << 8); // swap 2-byte long pairs v = ( v >> 16 ) | ( v << 16);
Jetez un coup d’oeil à Bit Twiddling Hacks . Il y a toute une section sur l’inversion des séquences de bits.
Vous pouvez voir ce site web http://graphics.stanford.edu/~seander/bithacks.html
Inverser des séquences de bits
Inverser les bits de manière évidente
Inverser les bits dans le mot par la table de recherche
Inverser les bits dans un octet avec 3 opérations (multiplication de 64 bits et division de module)
Inverser les bits dans un octet avec 4 opérations (multiplication 64 bits, pas de division)
Inverser les bits dans un octet avec 7 opérations (pas de 64 bits, seulement 32)
Inverser une quantité de N bits en parallèle avec des opérations de 5 * lg (N)