在 javascript 中获取数字最低有效位位置的最有效方法是什么?

What's the most efficient way of getting position of least significant bit of a number in javascript?

我有一些数字,我需要知道它们应该移动多少才能使它们的低位位于位置 0。

例如:
0x40000000 => 30 因为 0x40000000 >> 30 = 1
768 = 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 countTrailingZeroes(n) {
    n |= 0; // Turn to 32 bit range
    return n ? 31 - Math.clz32(n & -n) : 0;
}

console.log(countTrailingZeroes(0b11100)); // 2

三元表达式在那里捕获值 n=0,这就像一个退化的情况:它没有 1 位。