我如何获得javascript中数字的最低有效位?

问题描述 投票:0回答:1

我有一些数字,我需要获取它们的低位在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中是否有任何内置函数会更好?

javascript bit-manipulation bit
1个回答
0
投票

您无法通过内置函数立即获得该结果,但是可以避免使用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));
© www.soinside.com 2019 - 2024. All rights reserved.