2022q1 Homework4 (quiz4)

contributed by < a1234565 >

測驗 1

延伸第 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;       
}