2016-06-24 2 views
-1

Vous avez rencontré une question pour inverser des bits d'un entier non signé. J'ai essayé une approche différente. Cependant, je ne suis pas très familier avec le fonctionnement des opérateurs bit-wise. Quelqu'un peut-il s'il vous plaît indiquer ce qui est fondamentalement faux ici?Bouclage sur bits C++

unsigned int reverse(unsigned int A) 
{ 
unsigned int c=0; 
int a=0; 
while(a < 32) 
{ 
    c = c << 1; 
    c = c | (A & (1 << a)); 
    a++; 
} 
return c; 
+0

Dans un cas comme celui-ci, essayez de simuler votre code sur un crayon et du papier. Étape par étape, déclaration par déclaration à travers la boucle. Pour simplifier, supposons qu'un "entier non signé" n'a que 8 bits et que l'en-tête de la boucle indique 'while (a <8)'. Quelques cycles dans la boucle et vous devriez être capable de le comprendre. – davidbak

+0

Copie possible de [Best Algorithm for Bit Reversal (de MSB-> LSB à LSB-> MSB) dans C] (http://stackoverflow.com/questions/746171/best-algorithm-for-bit-reversal-from- msb-lsb-à-lsb-msb-in-c) – vaxquis

+0

@davidbak je vais l'essayer correctement. @ vaxquis, ce n'est pas un doublon puisque je n'ai demandé aucun algorithme d'inversion. – ak9

Répondre

0

Vous déplacez 1 vers la gauche dans les deux cas et obtenez le même résultat. Essayez d'utiliser 10000 ... (32 bits) et déplacez-le vers la droite au lieu de 1 < < a