Bestimmen von ganzzahligen Log2-Werten in C
In C kann die Ausführung ganzzahliger Log2-Operationen aufgrund des Fehlens eines dedizierten log2() auf Einschränkungen stoßen. Funktion. Dieses Problem tritt auf, wenn das Protokoll zur Berechnung der Indexebene in einem Binärbaum verwendet wird, wobei das Ergebnis möglicherweise für Kantenelemente (d. h. Elemente mit Werten 2^n) abgerundet wird.
Um dieses Problem zu mildern Um genaue Log2-Berechnungen sicherzustellen, kann die BSR-Anweisung verwendet werden. bsr ist auf neueren x86- oder x86-64-Plattformen verfügbar und gibt die Position des höchsten gesetzten Bits in einer vorzeichenlosen Ganzzahl zurück, was log2() entspricht.
Hier ist eine prägnante C/C-Funktion, die Inline-ASM verwendet, um invoke 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; }
Durch die Verwendung dieser Funktion können ganzzahlige log2-Werte für jede vorzeichenlose Ganzzahleingabe genau berechnet werden.
Das obige ist der detaillierte Inhalt vonWie berechnet man ganzzahlige Log2-Werte in C ohne eine spezielle Funktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!