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