contributed by < linhoward0522
>
1
2
3
4
已知輸入必為大於 0
的數值 (即 x > 0
),以下程式碼可計算
x
減去 1
,這樣如果 x
是 2
的冪,就會變成比它小 1
的冪,這樣可以保證算出來的對數是正確的r
來保存對數的結果,如果 x
大於 0xFFFF
,表示最高位為 1
的位置在較高的 16
位元,那麼 r
的值就設為 16
,這樣可以將 x
右移 16
位,減少需要檢查的位數x
小於 0xFFFF
,則 r
的值就設為 0
r | shift
更新上一步的結果,此時 x
剩下四種情況
0b11
0b10
0b01
0b00
x >> 1
來判斷是否有高位元的 1
,有的話就做 |
更新1
,以取得