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

之前的文章《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]);
  }
 }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值