我找到了這個函式,但是沒有解釋clzlut查找表的來源(我在網上搜索了很多小時,找不到任何東西):
static uint8_t clzlut[256] = {
8,7,6,6,5,5,5,5,
4,4,4,4,4,4,4,4,
3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,
2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0
};
uint32_t clz(uint32_t val)
{
uint32_t accum = 0;
accum = clzlut[val >> 24];
accum = (accum == 8 ) ? clzlut[(val >> 16) & 0xFF] : 0;
accum = (accum == 16) ? clzlut[(val >> 8) & 0xFF] : 0;
accum = (accum == 24) ? clzlut[ val & 0xFF] : 0;
return accum;
}
你如何生成這個查找表?生成此查找表的演算法是什么(在 C 或 JavaScript 等中)?我將使用它來實作“計數前導零”(clz)。我知道有內置函式clz,我只想知道如何生成后備,以及出于好奇/學習的目的。
uj5u.com熱心網友回復:
你如何生成這個查找表?
...知道如何生成后備,以及出于好奇/學習的目的。
For each index 0 to 255:
Start at count = 8. (Bit width of uint8_t)
Copy index to i.
while i > 0:
Divide i by 2.
Decrement count.
clzlut[index] = count
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/464746.html
上一篇:如何使用deBruijn圖(在JavaScript中)生成所有deBruijn序列?
下一篇:第二次呼叫方法后價值丟失
