跳到主要内容

Math.clz32

Math.clz32() 函数返回一个数字在转换成 32 无符号整形数字的二进制形式后,开头的 0 的个数,比如 1000000 转换成 32 位无符号整形数字的二进制形式后是 00000000000011110100001001000000 , 开头的 0 的个数是 12 个,则 Math.clz32(1000000) 返回 12.

注意

开发者打算移除该函数

// TODO: This is pretty well supported by browsers. Maybe we can drop it.
// 待办:这在浏览器中支持得相当好。也许我们可以去掉它。

export const clz32: (x: number) => number = Math.clz32
? Math.clz32
: clz32Fallback;

// Count leading zeros.
// Based on:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32
// 计算前导零。
// 基于:
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32
const log = Math.log;
const LN2 = Math.LN2;
function clz32Fallback(x: number): number {
const asUint = x >>> 0;
if (asUint === 0) {
return 32;
}
return (31 - ((log(asUint) / LN2) | 0)) | 0;
}