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;
}