如何查找第一组位的索引

时间:2013-08-08 19:57:46

标签: javascript bit-manipulation

是否有按位解决方案在掩码中找到第一个设置位的索引,只设置了一个位? 例如对于8,它将是3,对于16 => 4等等。没有循环plz。 我能想出的最好的解决方案是创建一个索引地图。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

对于子孙后代,ES6引入了Math.log2(以及log10),其确实如此:

Math.log2(8) === 3

提醒一下,对于任何logA(x)logB(x) / logB(A)

AB