在线文档教程

Math.clz32

Math.clz32

Math.clz32()函数返回一个数字在转换成 32 无符号整形数字的二进制形式后, 开头的 0 的个数。

语法

Math.clz32(x)

参数

x一个数值。

返回值

给定数字的32位二进制表示中前导零位的数量。

描述

"clz32" 是 CountLeadingZeroes32的缩写.

如果 x 不是数字类型, 则它首先会被转换成数字类型, 然后再转成 32 位无符号整形数字. 

如果转换后的 32 位无符号整形数字是 0, 则返回32, 因为此时所有位上都是 0.

这个函数主要用于那些编译目标为 JS 语言的系统中, 比如 Emscripten.

示例

使用Math.clz32()

Math.clz32(1 // 31 Math.clz32(1000 // 22 Math.clz32( // 32 [NaN, Infinity, -Infinity, 0, -0, null, undefined, 'foo', {}, []].filter( function(n) { return Math.clz32(n) !== 32 } // [] Math.clz32(true // 31 Math.clz32(3.5 // 30

Polyfill

以下polyfill是最有效的。

if (!Math.clz32) { Math.clz32 = function(x) { // Let n be ToUint32(x). // Let p be the number of leading zero bits in // the 32-bit binary representation of n. // Return p. if (x == null || x === 0) { return 32; } return 31 - Math.floor(Math.log(x >>> 0) * Math.LOG2E }; }

规范

SpecificationStatusComment
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Math.clz32' in that specification.StandardInitial definition.
ECMAScript Latest Draft (ECMA-262)The definition of 'Math.clz32' in that specification.Draft

浏览器兼容性

FeatureChromeFirefoxEdgeInternet ExplorerOperaSafari
Basic Support3831(Yes)(No)25(Yes)

FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support(Yes)(Yes)(Yes)31(No)(Yes)(Yes)