Integer类中numberOfLeadingZeros() 二进制返回无效位0的个数解读

Integer中输出二进制有效位的解读:
在这里插入图片描述
判断出除有效位外有多少个0存在。
这里采用的是分治法的思想,先把32位逻辑右移16位如果没有满足条件接着逻辑24位…等相当于把32位的字段减少到16位接着减小到8位,4位,2位,1位。
">>>"逻辑右移也称无符号右移的算法是 不管是正数负数往右移若干位后高位用0补;
"<<"算数左移 ;左移后低位用0补;

***具体分析过程如下图:
在这里插入图片描述
因为代码首先判断了为0的情况 所以想要进入下面的运算至少除有效位外有一个0

if (i == 0)
            return 32;

所以最终只右移到31位来判断
这里要注意的是:if(i>>>16==0) 只是个判断语句,不会修改i的值,所以左移的时候还是用原来的值(左移是计算语句 会修改)
图中的思想是:先逻辑右移16位判断右边16位是否位0,如果都为0,则要往把原来的i值往左移16位,以便于下面逻辑右移24位 判断右边除16位0以外还有几个无效位的0。如果右边16位不都为0 则不计算 然后往下判断右边8位。以此类推 来判断所有无效位0的个数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值