Différences entre les versions de « Les opérations bit à bit/Manipulations sur les bits de poids faible/fort »

m
n |= n >> 8;
n |= n >> 16;
}
</syntaxhighlight>
 
Une interprétation mathématique de ce calcul est qu'il donne le nombre de la forme <math>2^n - 1</math> immédiatement supérieur. Par exemple, 5 donnera 7 (8-1), 25 donnera 31 (32-1), 250 donnera 255 (256-1), etc.
 
===Le calcul de la puissance de deux immédiatement supérieure===
 
Maintenant que l'on sait calculer le nombre de la forme <math>2^n - 1</math> immédiatement supérieur, on peut facilement deviner comment calculer la puissance de deux immédiatement supérieure à un nombre. Avec un tel calcul, 5 aurait pour résultat 8, 25 donnerait 32, 250 donnerait 256, etc. On pourrait croire qu'il suffirait de prendre le code précédent et d'y ajouter une incrémentation. Dans les faits, ce code ainsi modifié marcherait, mais échouerait dans le cas où le nombre considéré serait lui-même une puissance de deux. Pour éviter cela, il suffit d'ajouter une décrémentation en première instruction.
 
<syntaxhighlight lang="c">
unsigned NextPowerOf2 (unsigned n)
{
n--;
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return n++;
}
</syntaxhighlight>
38 132

modifications