Heim  >  Artikel  >  Backend-Entwicklung  >  Wie berechnet man ganzzahlige Log2-Werte in C ohne eine spezielle Funktion?

Wie berechnet man ganzzahlige Log2-Werte in C ohne eine spezielle Funktion?

DDD
DDDOriginal
2024-11-17 21:54:02827Durchsuche

How to Calculate Integer Log2 Values in C   Without a Dedicated Function?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn