Calcul Log2 entier en C
Développement de la question donnée, qui cherche une méthode pour effectuer une opération log2 entière en C sans rencontrer de flottant -problèmes d'approximation de points, nous explorons une solution. Les bibliothèques standard C ne fournissent pas d'implémentation entière de log, ce qui complique le calcul du niveau d'un index dans un arbre binaire à l'aide de log(index) / log(2).
Pour résoudre ce problème, la fonction ASM en ligne fournie utilise l'instruction bsr sur les plates-formes x86 ou x86-64. Cette instruction fournit la position du bit le plus élevé dans un entier non signé, ce qui équivaut à log2(). L'implémentation utilise la fonctionnalité ASM en ligne.
#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 tirant parti de cette méthode, vous pouvez déterminer avec précision le niveau de l'index dans l'arborescence binaire, même pour les éléments de bord où valeur = 2^n.
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!