A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© doyxy 中级黑马   /  2013-12-27 12:40  /  855 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 doyxy 于 2013-12-28 08:53 编辑

今天写了十进制转换为二进制,八进制,十六进制的代码,大家帮忙看下有没有什么问题呢?谢谢
主要是32行
for (int x=0; x<(32/offset+1) ; x++ )//二进制最高32位,八进制最高11位,十六进制最高8位
八进制整除不了,为这里加了1,但是这样二进制和十六进制的位数多1了,有没有什么更好的解决方法呢?

有效代码到42行,后面的是我之前写的,已经注释掉了
  1. class ArrayTest5
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 toBin(-60);
  6.                 toOct(-60);
  7.                 toHex(-60);
  8.         }
  9.         //二进制
  10.         public static void toBin(int num)
  11.         {
  12.                 trans(num,1,1);
  13.         }
  14.         //八进制
  15.         public static void toOct(int num)
  16.         {
  17.                 trans(num,7,3);
  18.         }
  19.         //十六进制
  20.         public static void toHex(int num)
  21.         {
  22.                 trans(num,15,4);
  23.         }
  24.         //提取代码
  25.         public static void trans(int num, int base , int offset)
  26.         //base为被与数,二进制为1,八进制为7,十六进制为15
  27.         //offset为右移位数,二进制为1,八进制为3,十六进制为4
  28.         {
  29.                 char[] arr = {'0','1','2','3','4','5','6','7',
  30.                                                 '8','9','A','B','C','D','E','F'};
  31.                 StringBuffer sb = new StringBuffer();
  32.                 for (int x=0; x<(32/offset+1) ; x++ )//二进制最高32位,八进制最高11位,十六进制最高8位
  33.                 {
  34.                         int temp = num&base;
  35.                         sb.append(arr[temp]);
  36.                         num = num>>>offset;
  37.                         if (num==0)//右移后如果数值为0则跳出
  38.                                 break;        
  39.                 }
  40.                 System.out.println(sb.reverse());
  41.         }

  42.         /*

  43.         //将十进制转换为二进制
  44.         //思路:十进制转为二进制是不停模2的过程,最后一位模完为0,则可以设置当num>0时循环
  45.         public static void toBin(int num)
  46.         {
  47.                 StringBuffer sb = new StringBuffer();
  48.                 while (num>0)
  49.                 {
  50.                         sb.append(num%2);
  51.                         //System.out.print(num%2);
  52.                         num = num/2;
  53.                 }
  54.                 System.out.println(sb.reverse());
  55.         }
  56.         //十进制转换为二进制的改进,上面的代码不能转换负数
  57.         public static void toBin_2(int num)
  58.         {
  59.                 StringBuffer sb = new StringBuffer();
  60.                 for (int x=0; x<32 ; x++ )
  61.                 {
  62.                         int temp = num & 1;
  63.                         sb.append(temp);
  64.                         num = num>>>1;
  65.                         if (num == 0)
  66.                                 break;
  67.                 }
  68.                 System.out.println(sb.reverse());
  69.         }

  70.         //将十进制转换为十六进制
  71.         //思路:十进制转换为十六进制,分别取得最后4位二进制位并转换为十六进制位,即num&15;
  72.         public static void toHex(int num)
  73.         {
  74.                 StringBuffer sb = new StringBuffer();
  75.                 for (int x=0;x<8;x++ )
  76.                 {
  77.                         int temp = num&15;
  78.                         if (temp>9)
  79.                                 //System.out.println((char)(temp-10+'A'));
  80.                                 sb.append((char)(temp-10+'A'));
  81.                         else
  82.                                 //System.out.println(temp);
  83.                                 sb.append(temp);
  84.                         num = num>>>4;
  85.                         if (num==0)//右移4位后如果数值为0则跳出
  86.                                 break;
  87.                         
  88.                         
  89.                 }
  90.                 System.out.println(sb.reverse());

  91.         }
  92.         //查表法:定义一个数组,即将0-F依次存入,则num&15后的值即为对应角标,输出arr[temp]即可

  93.         public static void toHex_2(int num)
  94.         {
  95.                 char[] arr = {'0','1','2','3','4','5','6','7',
  96.                                                 '8','9','A','B','C','D','E','F'};
  97.                 StringBuffer sb = new StringBuffer();
  98.                 for (int x=0; x<8 ; x++ )//8*4个二进制位,每4位一组,所以x<8
  99.                 {
  100.                         int temp = num&15;
  101.                         sb.append(arr[temp]);
  102.                         num = num>>>4;
  103.                         if (num==0)//右移4位后如果数值为0则跳出
  104.                                 break;        
  105.                 }
  106.                 System.out.println(sb.reverse());
  107.         }
  108.         */
  109. }
复制代码





评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

1 个回复

倒序浏览
没有问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马