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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董凯 中级黑马   /  2013-7-20 14:56  /  1075 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class ChaBiao
  2. {
  3. public static void main(String[] args)
  4. {
  5. toHex(60);

  6. }
  7. public static void toHex(int a)
  8. {
  9. char chs []={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  10. char arr []=new char[8];
  11. int pos=arr.length;
  12. while (a!=0)
  13. {
  14. int temp =a&15;
  15. arr[--pos]=chs[temp];
  16. a=a>>>4;
  17. }
  18. for (int x=pos; x<arr.length;x++ )
  19. {
  20. System.out.print(arr[x]);
  21. }
  22. }
  23. }
复制代码
这个是老师讲的:
十进制转成16进制的程序,用的是查表法!
我想要得到一个程序可以同时实现十进制转换成二进制,八进制,十六进制的程序!
求高手指教!

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

7 个回复

倒序浏览
本帖最后由 xscn 于 2013-7-20 15:25 编辑
  1. class ArrayBase
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.         toBin(60);
  6.         System.out.println("");
  7.         toHex(60);
  8.         System.out.println("");
  9.         toBa(60);
  10.     }

  11.     //十进制-->二进制
  12.    public static void toBin(int num)
  13.     {
  14.         trans(num,1,1);
  15.     }
  16.     //十进制-->八进制
  17.    public static void toBa(int num)
  18.     {
  19.         trans(num,7,3);
  20.     }
  21.     //十进制-->十六进制
  22.    public static void toHex(int num)
  23.     {
  24.         trans(num,15,4);
  25.     }

  26.     public static void trans(int num,int base,int offset)//需要转换的数字,需要与的基础数,需要右移的位数
  27.     {

  28.         if(num==0)//特殊情况0
  29.         {
  30.             System.out.println(0);
  31.             return ;
  32.         }
  33.         char[] chs = {'0','1','2','3'
  34.                     ,'4','5','6','7'
  35.                     ,'8','9','A','B'
  36.                     ,'C','D','E','F'};
  37.         char[] arr = new char[32];

  38.         int pos = arr.length;

  39.         while(num!=0)
  40.         {
  41.             int temp = num & base;
  42.             arr[--pos] = chs[temp];
  43.             num = num >>> offset;
  44.         }

  45.         for(int x=pos; x<arr.length; x++)
  46.         {
  47.             System.out.print(arr[x]);
  48.         }
  49.         return ;
  50.     }
  51. }  
复制代码
十进制转2进制与1右移1位,十进制转16进制与15右移4位,十进制转8进制与7右移3位,抽取查表的功能定义函数接受(需要转换的数字,需要与的基础数,需要右移的位数)就可以了

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
支持楼上的,当然也可以使用下面的这种封装好的方法,统一调用同一个函数,用switch来判断转换成哪个进制,然后在case里面调用相关的函数就可以 了。
v 使用Integer或Long的toBinaryString方法将整数转换为二进制。
v 使用Integer或Long的toOctalString方法将整数转换为八进制。
v 使用Integer或Long的toHexString方法将整数转换为十六进制。

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
xscn 发表于 2013-7-20 15:16
十进制转2进制与1右移1位,十进制转16进制与15右移4位,十进制转8进制与7右移3位,抽取查表的功能定义函数 ...

谢谢!最后一个return;可以不用!
回复 使用道具 举报
wedge 发表于 2013-7-20 15:33
支持楼上的,当然也可以使用下面的这种封装好的方法,统一调用同一个函数,用switch来判断转换成哪个进制, ...

有实例么?
回复 使用道具 举报

其实很好理解的,比如你要将十进制转成X进制的。就需要定一个函数比如String toX(待转数,转换到的进制)
然后方法里面就是switch(进制)
之后就case2 : return Integer.toBinaryString(待转数);
         case 8: .....
         case 16: .....
这样就好了,楼主可以试下,尽管我没有试过,但我相信是一定可以的,调用的时候把原数,以及进制传进去就好了。
         
回复 使用道具 举报
董凯 中级黑马 2013-7-20 16:19:38
7#
wedge 发表于 2013-7-20 16:15
其实很好理解的,比如你要将十进制转成X进制的。就需要定一个函数比如String toX(待转数,转换到的进制)
...

好的!谢谢
回复 使用道具 举报
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. public class To {
  4.         public static void main(String[] args) throws Exception {
  5.                 System.out.println("请输入一个十进制数,程序将其转换为其它进制:");
  6.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  7.                 while(true) {
  8.                         String line= br.readLine();
  9.                         try {
  10.                                 int x = Integer.parseInt(line);
  11.                                 toBinary(x);
  12.                                 toOctal(x);
  13.                                 toHex(x);
  14.                                 break;
  15.                         } catch (NumberFormatException e) {
  16.                                 System.out.println("您输入的不是数字,不能转换,请重新输入:");
  17.                         }
  18.                 }
  19.         }
  20.         static void toBinary(int x) throws Exception {  //转二进制      
  21.                 StringBuffer sb = new StringBuffer();               
  22.                 while(x > 0) {                                                       
  23.                         sb.append(x % 2);                                               
  24.                         x /= 2;
  25.                 }
  26.                 sb.reverse();
  27.                 System.out.println("二进制:" + sb);
  28.         }
  29.         static void toOctal(int x) {                                        //转八进制
  30.                 StringBuffer sb = new StringBuffer();
  31.                 while(x > 0) {
  32.                         sb.append(x % 8);
  33.                         x /= 8;
  34.                 }
  35.                 sb.reverse();
  36.                 System.out.println("八进制:" + sb);
  37.         }
  38.         static void toHex(int x) {                                                //转十六进制
  39.                 char[] ch = {'0','1','2','3','4','5','6','7','8',        //把十六进制中的元素存储进char类型的数组ch中;
  40.                                 '9','A','B','C','D','E','F'};
  41.                 StringBuffer sb = new StringBuffer();                           
  42.                 while(x > 0) {
  43.                         sb.append(ch[x % 16]);
  44.                         x /= 16;
  45.                 }
  46.                 sb.reverse();
  47.                 System.out.println("十六进制:" + sb);
  48.         }
  49. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马