2011-03-18 39 views
0

我在C#中實現了代碼here以獲取int的MSB。我不確定我需要用日誌參考表和主代碼來將代碼擴展到64位。爲Log_2擴展位破解爲64位

文中所說的唯一的事情就是需要2個CPU的操作,所以我推斷這個更改是次要的。

+0

它被標記爲C,但您使用的是C#嗎? – hirschhornsalz 2011-03-18 12:54:35

+0

源代碼是C.我將轉換爲C#。我不是要求某人爲我這麼做......我如何以64位(C語言)實現C語言。 – IamIC 2011-03-18 13:12:58

+0

假設你在一種x86體系結構上,我只使用bsr指令。在gcc中它可以用__builtin_clzll()。這用一條指令計算對數......不幸的是我不知道如何將它轉換爲C#。 – hirschhornsalz 2011-03-18 13:32:14

回答

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

完美!謝謝。 – IamIC 2011-03-18 13:49:06