如何找到第一个设置位的索引

Den*_*ich 5 javascript bit-manipulation

是否有按位解决方案可以在仅设置一位的掩码中找到第一个设置位的索引?例如,对于 8,它将是 3,对于 16 => 4,依此类推。请不要循环。我能想出的最佳解决方案是创建位到索引的映射。

Pau*_* S. 5

function firstBit(x) {
    return Math.floor(
        Math.log(x | 0) / Math.log(2)
    ) + 1;
}
i=4; console.log(i.toString(2), firstBit(i)); // 100 3
i=7; console.log(i.toString(2), firstBit(i)); // 111 3
i=8; console.log(i.toString(2), firstBit(i)); // 1000 4
Run Code Online (Sandbox Code Playgroud)