无符号右移就是不论什么情况向右移动数据后左端均补0.下面用一程序说明其应用。
我们用查表法将十进制的60转换为16进制时,其代码如下
class IntegerToHex
{
public static void main(String[] args)
{
toHex(60);
}
public static void toHex(int num)
{
char [] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char [] arr = new char[32];
int pos = arr.length;
while(num != 0)//内存中存储的二进制数据位0是结束循环
{
int temp = num & 15;
arr[--pos] = chs[temp];
num = num >>> 4;//每次将内存中的二进制数据无符号右移4
}
for(int x = pos;x <arr.length;x++)
System.out.print(arr[x]);
}
}
1.在内存中最初存储的十进制60的二进制的形式为:0000-0000 0000-0000 0000-0000 0011-1100,此时不为零执行右移4位操作一次;
2.当执行一次无符号右移4位后内存中的二进制形式为:0000-0000 0000-0000 0000-0000 0000-0011 最左边的4个0就是无符号右移四位后补的0, 此时还不为0,无符号右移4位(移出内存的1100通过查表知道对应得16进制数为 c);
3.当执行第二次无符号右移4位后内存中的二进制形式为:0000-0000 0000-0000 0000-0000 0000-0000 最左边的4个0就是第二次无符号右移四位后补的0(移出内存的0011通过查表知道对应得16进制数为 3);
4.通过第二次无符号右移后,此时数据已为0,不满足循环条件(num !=0)则结束循环打印十进制60对应的16进制数3c(本来打印的应该是 c3 但程序中的打印是逆序打印的就变成了3c,也就是十进制60对应的16进制数3c);
希望以上分析让你对无符号右移的理解有帮助,如果有不妥的地方请指正,大家彼此学习,一起进步! |