首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript用Math.clz32方法计算前导0的个数

1. 基本概念

Math.clz32()方法的作用就是计算一个32位无符号整数的二进制表示中有多少个前导0,clz其实就是词组“count leading zero”的首字母缩写,因此方法名clz32代表的含义就是“计算32位无符号整数的前导0的个数”。

这到底是什么意思呢?比如有一个整数738,那么首先将它表示成32位无符号整数的二进制形式,结果为00000000000000000000001011100010。我们再来数它有多少个前导0,所谓前导0就是该二进制形式最左边那些连续的0,结果有22个;因此Math.clz32(738)的返回值就是22。

调用Math.clz32()方法的语法形式如下所示:

Math.clz32(x);

2. 参数转换

从Math.clz32()方法的作用可知,它的参数x应该是一个32位的无符号整数。如果不是,那么它会先将x自动转换为32位的无符号整数。具体的转换过程如下:

1. 将x转换为数字(即Number类型),如果x本身就是数字,那么转换后还是它自身;我们称这一步的结果为x1;

2. 如果x1是NaN、+0、-0、正无穷(+Infinity)或负无穷(-Infinity),那么最终的转换结果就为+0并退出转换过程;否则,继续下一步;

3. 让一个数x2的符号(正负号)和x1相同,并且它的绝对值等于Math.floor(Math.abs(x1)),即先计算x1的绝对值再向下取整;此时x2必定是一个整数,但可能是负的;

4. 计算x2除以2^32(2的32次方)的余数,我们称这一步的结果为x3;

5. 将x3作为最终的转换结果,整个转换过程结束。

为了让读者对这一参数转换过程有个更直观的认识,我们举一个具体的例子来进行演示。假设我们以一个字符串"738.64"作为参数调用Math.clz32()方法,即Math.clz32("738.64")。

第1步,因为参数x为字符串"738.64",不是一个数字,所以将它转换为数字,结果x1为738.64;

第2步,x1不是NaN、+0、-0、正无穷和负无穷中的任何一个,所以进入下一步;

第3步,让x2首先是一个正数(和x1的符号相同),然后计算x1的绝对值,结果为738.64,再向下取整,结果为738;即x2的绝对值为738,因此x2的值最终等于738;

第4步,计算738除以2^32(2的32次方)的余数,结果也等于738;

第5步,将738作为最终的转换结果,并结束转换过程。因此调用Math.clz32("738.64")相当于执行Math.clz32(738)。

3. 示例

本示例的执行结果如下图所示:

图1 示例代码的执行结果

(完)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210125A06VU900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券