将Log_2的位错误扩展到64位

时间:2011-03-18 12:19:20

标签: c 64-bit bit-manipulation 32bit-64bit

我在C#中实现了代码here以获取int的MSB。我不确定我需要用日志引用表和主代码将代码扩展到64位。

文中所说的唯一内容是需要再增加2个CPU操作,因此我推断这个变化很小。

1 个答案:

答案 0 :(得分:1)

不需要更改表格。需要再增加一级if()

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];
}