Integer类的numberOfLeadingZeros(int i)

上图代码的作用是算出一个int(32bit)类型数字的二进制形式的前导的零的个数。

上图代码作用如下:

32的一半为16,所以将数字使用>>>右移16bit,然后判断是否等于0,情形1:若等于0则存储前导的零个数的变量加16,接下来以同样的方式得到蓝色部分(16bit)的前导的零个数进行累加;情形2:若不等于0则接下来以同样的方式得到红色部分(16bit)的前导的零个数进行累加。

16的一半为8,若上一步为情形2则要将数字使用>>>右移24(8+16)bit,若为情形1则要将数字使用>>>右移8bit,这很麻烦,所以我们可以在上一步的情形1中将数字使用<<左移16bit并将其赋值给原先数字变量,这样子就使得该步骤的>>>右移位数一致(24bit)。

经过上图红框代码后我们只需再得到下图黄色部分的前导的零即可获得指定数字的前导的零个数。

上图黄色部分不可能全为0,因为若为0则数字为0在if语句时就已经返回32了,只能为11,10,01,所以定义存储前导的零个数的变量时初始化为1,然后在最后减去>>>右移31的数字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值