5

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

4

2 回答 2

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
于 2013-08-08T20:09:48.590 回答
3

对于后代,ES6 引入了Math.log2(也引入了log10),它正是这样做的:

Math.log2(8) === 3

提醒一下,logA(x)适用logB(x) / logB(A)于任何AB

于 2017-03-21T23:30:35.793 回答