2011-03-18 2 views
0

J'ai implémenté le code here en C# pour obtenir le MSB d'un int. Je ne suis pas certain de ce que je dois faire avec la table de référence du journal et le code principal pour étendre le code à 64 bits. La seule chose que le texte dit est qu'il faudra 2 opérations CPU de plus, donc je déduis que le changement est mineur.Extension du bidouillage de bits pour Log_2 à 64 bits

+0

Il est étiqueté C, mais vous utilisez C#? – hirschhornsalz

+0

Le code source est C. Je vais convertir en C#. Je ne demande pas à quelqu'un de faire ça pour moi ... juste comment implémenter le C en 64 bits (en C). – IamIC

+0

En supposant que vous êtes sur une sorte d'architecture x86, j'utiliserais simplement l'instruction bsr. En gcc, il est disponible en tant que __builtin_clzll(). Cela calcule le logarithme avec une instruction ... Malheureusement, je ne sais pas comment vous pourriez le traduire en C#. – hirschhornsalz

Répondre

1

La table n'a pas besoin d'être modifiée. Un niveau supplémentaire de if() est nécessaire:

if (ttt = v >> 32) 
{ 
    if (tt = ttt >> 16) 
     r = (t = tt >> 8) ? 56 + LogTable256[t] : 48 + LogTable256[tt] 
    else 
     r = (t = ttt >> 8) ? 40 + LogTable256[t] : 32 + LogTable256[ttt] 
} 
else 
{ 
    if (tt = v >> 16) 
     r = (t = tt >> 8) ? 24 + LogTable256[t] : 16 + LogTable256[tt]; 
    else 
     r = (t = v >> 8) ? 8 + LogTable256[t] : LogTable256[v]; 
} 
+0

Parfait! Merci. – IamIC

Questions connexes