Maison >développement back-end >C++ >Comment puis-je trouver efficacement la position du bit défini le moins significatif dans un entier ?
Détermination de la position du bit le moins significatif défini
En programmation, détermination de la position du bit le moins significatif (LSB) défini dans un entier peut être une opération utile. Une implémentation triviale consiste à masquer à plusieurs reprises l'entier avec 1 et à le décaler vers la droite jusqu'à ce que le résultat devienne différent de zéro, mais cette méthode peut être lente pour les grands entiers.
Optimisation du bit Twiddling
Les hacks de manipulation de bits constituent une alternative efficace. L'un de ces hacks, connu sous le nom de méthode « multiplication et recherche », exploite les propriétés de la séquence de Bruijn pour effectuer le calcul en une seule étape.
Implémentation du code
unsigned int v; // find the number of trailing zeros in 32-bit v int r; // result goes here static const int MultiplyDeBruijnBitPosition[32] = { 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9 }; r = MultiplyDeBruijnBitPosition[((uint32_t)((v & -v) * 0x077CB531U)) >> 27];
Explication
Ce code fonctionne en multipliant l'entier v par une constante magique puis en exécutant un peu de décalage sur le résultat. Le tableau MultiplyDeBruijnBitPosition mappe le résultat de la multiplication à la position souhaitée du LSB.
Avantages et références
Cette méthode est nettement plus rapide que l'implémentation triviale, en particulier pour grands entiers. Pour plus d'informations et des explications détaillées sur cette technique, reportez-vous à :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!