我有一些数字,我需要获取它们的低位在0位应该移位多少。
例如:0x40000000 => 30,因为0x40000000 >> 30 = 1768 = 512 + 256 => 8
此作品
if (Math.log2(x) == 31)
return 31;
if (Math.log2(x) > 31)
x = x & 0x7FFFFFFF;
return Math.log2(x & -x)
JavaScript中是否有任何内置函数会更好?
您无法通过内置函数立即获得该结果,但是可以避免使用Math.log2
。有一个鲜为人知的函数Math.clz32
,该函数以其32位二进制表示形式对数字的前导零进行计数。像这样使用它:
function getShift(n) {
n = n | 0; // Turn to 32 bit range
return n ? 31 - Math.clz32(n & -n) : 0;
}
console.log(getShift(12));