contributed by < a1234565
>
延伸第 3 週測驗題的測驗 7,已知輸入必為大於 0 的數值 (即 x > 0),以下程式碼可計算
⌈log2(x)⌉
,也就是 ceil 和 log2 的組合並轉型為整數:
int ceil_log2(uint32_t x)
{
uint32_t r, shift;
x--;
r = (x > 0xFFFF) << 4; //0xFFFF = 0x0000FFFF
x >>= r;
shift = (x > 0xFF) << 3;
x >>= shift;
r |= shift;
shift = (x > 0xF) << 2;
x >>= shift;
r |= shift;
shift = (x > 0x3) << 1;
x >>= shift;
// r|= shift
//shift = (x > 0x1) << 0;
//r |= shift;
return (EXP1) + 1;
}
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up