您的位置:首页 > 编程语言 > Java开发

Java数组-数组的应用-应用查表法将十进制整数转化为16进制-2

2016-09-29 16:32 459 查看
之前的文章《Java数组-数组的应用  十进制整数转化为16进制 》程序转化出来的16进制,输出的结构为倒序,还需要多程序进行修改

/*

数组的应用:

获取一个整数的16进制表现形式。

*/

class  TenToHex

{

 public static void main(String[] args)

 {

  System.out.println("Hello World!");

  toHex(60);

  toHex_2(60);

  toHex_3(60);

 }

 public static void toHex(int num)

 {

  for(int x=0;x<8;x++)  //一个int整型变量有32个比特(bit),4个字节(byte)

  {

   int temp = num & 15;

   //15是4个比特表示的最大整数,num与15作与运算,结果为num的最后4个比特位,4位二进制表示一位16进制

   if(temp>9)

    System.out.println((char)(temp-10+'A'));

   else

    System.out.println(temp);

   num = num >>> 4;

   //对二进制进行无符号右移四位,将已经转化为16进制的二进制移去,对剩余的二进制位进行循环转化

  }

 }

 /*

 在这里可以考虑使用数组。那么什么时候使用数组呢?

 如果数据出现了对应关系,而且对应关系的一方是有序的数字编号,并可以作为角标使用。

 这时就必须要想到数组的使用

 本例中的转化为16进制隐含着数据的对应关系。

 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

 0,1,2,3,4,5,6,7,8,9, 10,11,12,13,14,15

 就可以将这些数据存储到数组中

 根据运算结果作为的角标直接去查数组中对应的元素即可。

 这种方式称为查表法。

 */

 //查表法应用

 public static void toHex_1(int num)

 {

  //定义一个对应关系表

  char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

  for(int x=0;x<8;x++)

  {

   int temp = num & 15;

   System.out.print(chs[temp]);

   num = num >>> 4;

  }

 }//输出的结果为倒序,需要对该程序进行改进

 /*查表法中会查到比较多的数据时,可以考虑从先将数据存储起来,之后再进行操作。

 所以定义一个数组,作为临时容器,存储查表法查到的数据。

 下面的程序是对上面查表法的改进

 */

 public static void toHex_2(int num)

 {

  //定义一个对应关系表

  char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

  //定义一个临时容器

  char[] arr = new char[8];

  int pos = 0;

  

  while(num!=0)

  {

   int temp = num & 15;

   arr[pos++] = chs[temp];

   num = num >>> 4;

  }

/*

  //这里下面的输出和预想不同

  System.out.println(arr.length);

  for(int x=0;x<arr.length;x++)

  {

   System.out.print(arr[x]+",");

  }

  //在cmd下的输出结果为C,3, , , , , , ,

  //在editplus下的输出结果为C,3,

*/

  //修改为

  for (int x=0;x<pos ;x++ )

  {

   System.out.print(arr[x]+",");

  }//cmd下输出结果为C,3,空位没有了

  System.out.println();

  

  

 }

 //下面是将上面的输出倒序的程序修改为16进制正序输出的程序

 public static void toHex_3(int num)

 {

  //定义一个对应关系表

  char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

  //定义一个临时容器

  char[] arr = new char[8];

  int pos = arr.length;//pos的位置指在数组的尾部

  

  while(num!=0)

  {

   int temp = num & 15;

   arr[--pos] = chs[temp];

   num = num >>> 4;

  }

  for(int x=pos;x<arr.length;x++)

  {

   System.out.print(arr[x]);

  }

 }

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: