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的个数。