在 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 位。
我有一些数字,我需要知道它们应该移动多少才能使它们的低位位于位置 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 位。