Schnelle Berechnung von log2 für 64-Bit-Ganzzahlen

Eine großartige Programmierressource, Bit Twiddling Hacks, schlägt vor (Hier) die folgende Methode, um log2 einer 32-Bit-Ganzzahl zu berechnen:

#define LT(n) n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n
static const char LogTable256[256] = 
{
    -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
    LT(4), LT(5), LT(5), LT(6), LT(6), LT(6), LT(6),
    LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7)
};

unsigned int v; // 32-bit word to find the log of
unsigned r;     // r will be lg(v)
register unsigned int t, tt; // temporaries
if (tt = v >> 16)
{
    r = (t = tt >> 8) ? 24 + LogTable256[t] : 16 + LogTable256[tt];
}
else 
{
    r = (t = v >> 8) ? 8 + LogTable256[t] : LogTable256[v];
}

und erwähnt das

Die Nachschlagetabellenmethode benötigt nur etwa 7 Vorgänge, um das Protokoll eines 32-Bit-Werts zu finden. Bei einer Erweiterung für 64-Bit-Mengen wären ungefähr 9 Vorgänge erforderlich.

Leider gibt es keine zusätzlichen Informationen darüber, wie man den Algorithmus tatsächlich auf 64-Bit-Ganzzahlen erweitern sollte.

Irgendwelche Hinweise, wie ein 64-Bit-Algorithmus dieser Art aussehen würde?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage