手动实现整型数值二进制转十六进制

Posted on 2018-08-27 21:57  qianqianhaha  阅读(561)  评论(0)    收藏  举报
 1 String str1 = Integer.toBinaryString(60);
 2 String str2 = Integer.toHexString(60);
 3 int i1 = 60;
 4 int i2 = i1&15;
 5 String j = (i2 > 9)? (char)(i2-10 + 'A')+"" : i2+"";
 6 
 7 int temp = i1 >>> 4;
 8 i2 = temp & 15;
 9 String k = (i2 > 9)? (char)(i2-10 + 'A')+"" : i2+"";
10 System.out.println(k+""+j);

一个比较简单的题目:手动实现整形数值60二进制到十六进制的转化,以上是题目列出的答案。

1. 计算机中的数值均以二进制补码形式存储;

2. 二进制转化为十六进制,取四位一转化。

60的存储形式为0011 1100,第4行代码取后四位,7、8行代码取前四位,这里移位算子起到了/16的作用,移位算子作用很大,应该掌握。第5、9行代码内容一致,都是将四位码转化为字符,这里“?:”的计算符号处理也很好,相当于省去了if条件句,比较简洁直观。另外使用强制类型转化将int类型转化为char型,并使用“+”连接String类型数据。最后,代码中的“&15”——与1111按位与,与“%16”——除16取余操作一致,可以进行替换。

扩展:

1. 如果被转换的数值实际占用字节数未知,应该如何处理?

 1 int temp=num;
 2 while(temp>0){
 3     temp/=16;//temp=temp>>>4
 4     bits++;
 5 } 
 6  
 7 int temp=num;
 8 String[] result=new String[bits];
 9 for(int i=0;i<bits;i++)
10 {
11     result[i] = ((temp&15)>9?(char)(temp&15-10+'A')+"":temp&15+"");
12     temp/=16;  //temp=temp>>>4        
13 }    

假设数值num是手动输入的,将此值赋给temp,并利用while循环确定num的4位一组的组数,代码中bits代表的就是组数。接下来,则定义一个大小为bits的String数组,将每个四位转化成的字符存入即可(注意存入顺序为高位到低位——大索引到小索引)。

2. 负整数的转化如何处理(如-60)?

与正数转化过程一致,同样将数值在计算机存储的补码拿来求。

如int型的-1,在计算机中为11111111 11111111 11111111 11111111 ,16进制为0xFFFFFFFF。