黑马程序员技术交流社区

标题: 10进制转2/8/16进制练习 [打印本页]

作者: niuapp    时间: 2015-5-19 11:41
标题: 10进制转2/8/16进制练习
  1. /*
  2.         目标:练习位运算符
  3.         方法:10进制转2、16、8进制
  4. */

  5. import java.util.Scanner;

  6. class JinZhi10 {
  7.         public static void main(String[] args) {
  8.                 //StringBuffer sb = new StringBuffer();
  9.                 Scanner sc = new Scanner(System.in);
  10.                 System.out.println("输入一个需要转换的十进制整数");
  11.                 int x = sc.nextInt();

  12.                 System.out.println("二进制:"+to2(x).reverse());
  13.                 System.out.println("十六进制:"+to16(x).reverse());
  14.                 System.out.println("八进制:"+to8(x).reverse());
  15.         }
  16.        
  17.         //转2进制
  18.         public static StringBuffer to2(int x){

  19.                 StringBuffer sb = new StringBuffer();

  20. //                while(x>0){                        //
  21. //                        sb.append(x%2);        //先对2取余,存起来
  22. //                        x = x/2;                //然后x除2,继续判断,直到x=0
  23. //                }
  24.                 if(x==0){
  25.                         sb.append(0);
  26.                 }else{
  27.                 while(x!=0){                        //这个方法更好
  28.                         sb.append(x&1);
  29.                         x = x>>>1;
  30.                 }
  31.                 }

  32. //                for(int c=0; c<32; c++){
  33. //                        sb.append(x&1);
  34. //                        x = x>>1;
  35. //                }

  36.                 return sb;
  37.         }
  38.         //转16进制
  39.         public static StringBuffer to16(int x){

  40.                 StringBuffer sb = new StringBuffer();
  41.                 if(x==0){
  42.                         sb.append(0);
  43.                 }else{
  44.                         while(x!=0){
  45.                                 int temp = x&15;                //取出2进制x的最后4位,用来表示16进制的最后1位
  46.                                 if(temp>=10){
  47.                                         sb.append((char)(temp-10+65));//如果取出的4位2进制数比9大,在16进制中用A-F表示,把 temp-10+'A' 后对应的值转为字符型存入字符串缓冲区中
  48.                                 }else{
  49.                                         sb.append(temp);
  50.                                 }
  51.                                 x = x>>>4;                //每次取出后4位,2进制x无符号右移4位,继续判断,直到x的有效位被取光
  52.                         }
  53.                 }
  54.                 return sb;                //返回保存的数,输出的时候反转
  55.         }

  56.         //转8进制
  57.         public static StringBuffer to8(int x){

  58.                 StringBuffer sb = new StringBuffer();
  59.                 if(x==0){
  60.                         sb.append(0);
  61.                 }else{
  62.                         while(x!=0){
  63.                                 sb.append(x&7);
  64.                                 x = x>>>3;
  65.                         }
  66.                 }
  67.                 return sb;
  68.        
  69.         }

  70. }
复制代码

作者: niuapp    时间: 2015-5-19 11:42
  1. /*
  2.         目标:JinZhi10.java 改版
  3.         因为代码重复,所以可以合在一起。
  4. */

  5. import java.util.Scanner;

  6. class  JZX
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 Scanner sc = new Scanner(System.in);
  11.                 System.out.println("输入一个需要转换的十进制整数");
  12.                 int x = sc.nextInt();
  13.                 System.out.println("输入2/8/16");
  14.                 int j = sc.nextInt();

  15.                 System.out.println(x+"转"+j+"进制:"+toJ(x, j).reverse());
  16.         }

  17.         public static StringBuffer toJ(int x, int j){

  18.                 int i = 0;
  19.                 switch(j){
  20.                         case 2:
  21.                                 i = 1;
  22.                                 break;
  23.                         case 8:
  24.                                 i = 3;
  25.                                 break;
  26.                         case 16:
  27.                                 i = 4;
  28.                                 break;
  29.                         default:
  30.                                 System.out.println("不会转这个进制");
  31.                
  32.                 }
  33.                 StringBuffer sb = new StringBuffer();
  34.                 if(x==0){
  35.                         sb.append(0);
  36.                 }else{
  37.                         while(x!=0){
  38.                                 int temp = x&(j-1);                //取出2进制x的最后i位,用来表示j进制的最后1位
  39.                                 if(temp>=10){
  40.                                         sb.append((char)(temp-10+65));//如果取出的4位2进制数比9大,在16进制中用A-F表示,把 temp-10+'A' 后对应的值转为字符型存入字符串缓冲区中
  41.                                 }else{
  42.                                         sb.append(temp);
  43.                                 }
  44.                                 x = x>>>i;                //每次取出后i位,2进制x无符号右移i位,继续判断,直到x的有效位被取光
  45.                         }
  46.                 }
  47.                 return sb;                //返回保存的数,输出的时候反转
  48.         }
  49. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2