在javascript中获取一个数字的最小有效位的最有效方法是什么?

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

我得到了一些数字,我需要得到它们的低位应该被移位多少才能在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中实现这个功能?

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

你不能立即得到这个结果,用 内置 函数,但您可以避免使用 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位。

© www.soinside.com 2019 - 2024. All rights reserved.