3 votes

Pourquoi dois-je décaler à gauche avant d'additionner le résultat ?

Voici un extrait de code qui fonctionne comme prévu, il inverse correctement les bits d'un entier et renvoie le nouvel entier. Ma question est la suivante : pourquoi la ligne result <<= 1 doivent se produire avant que je ne résume le résultat avec l'opération n&1 ?

Dans la première itération, cela n'affecte pas les résultats car le résultat est instancié en tant que 0. Si je mets l'élément result <<= 1 à la FIN de la boucle for, il me resterait encore à décaler le résultat avant d'additionner le résultat avec n&1 . Mon code, avec le résultat du décalage à gauche à la fin, ne fonctionne pas et je n'arrive pas à comprendre cette étape finale.

public int reverseBits(int n) {
    int result = 0;
    for(int i=0; i<32; i++){
        result <<= 1;
        result += n&1;
        n >>= 1;
    }
    return result;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X