Maison > Article > développement back-end > Comment calculer des valeurs entières Log2 en C sans fonction dédiée ?
Détermination des valeurs entières Log2 en C
En C, l'exécution d'opérations entières log2 peut rencontrer des limitations en raison de l'absence d'un log2() dédié fonction. Ce problème se produit lors de l'utilisation de log pour calculer le niveau d'un index dans un arbre binaire, où le résultat peut être arrondi à l'inférieur pour les éléments de bord (c'est-à-dire les éléments avec les valeurs 2^n).
Pour atténuer ce problème et garantir des calculs log2 précis, l'instruction bsr peut être utilisée. Disponible sur les plates-formes x86 ou x86-64 récentes, bsr renvoie la position du bit le plus élevé dans un entier non signé, ce qui équivaut à log2().
Voici une fonction C/C succincte qui utilise l'ASM en ligne pour invoquer bsr :
#include <stdint.h> static inline uint32_t log2(const uint32_t x) { uint32_t y; asm ( "\tbsr %1, %0\n" : "=r"(y) : "r" (x) ); return y; }
En utilisant cette fonction, les valeurs entières log2 peuvent être calculées avec précision pour toute entrée entière non signée.
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!