进制的转换

*不同进制的数据表现形式:
1.二进制:由0,1组成;以0b开头或者以B结尾;
2. 八进制:由0,1,2,3,4,5,6,7组成,以0开头;
3.十进制:由0,1,2,3,4,5,6,7,8,9组成,默认为为十进制数据;

4.十六进制:由0,1,2,3, 4,5,6,7,8,9,a,b,c,d,e,f(字母大小写都可以),以0x开头

任意进制之间的转换,java代码。

package 第一章_程序设计基础;


import java.util.Scanner;
public class E201_01_08进制转换器{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        boolean b = true;
        boolean b1 = false;
        do{
            System.out.println("*----------------进制转换器-----------------*");
            System.out.print("*A:十进制 => 二进制\t\t");
            System.out.println("B:二进制 => 十进制  *");
            System.out.print("*C:十进制 => 八进制\t\t");
            System.out.println("D:八进制=>十进制    *");
            System.out.print("*E:十进制 => 十六进制\t");
            System.out.println("F:十六进制=> 十进制 *");
            System.out.print("*G:二进制 => 八进制\t\t");
            System.out.println("H:八进制 => 二进制  *");
            System.out.print("*I:二进制 => 十六进制\t");
            System.out.println("J:十六进制 => 二进制*");
            System.out.println("*K:退出");
            System.out.print("请选择(A-K):");
            char c = sc.next().charAt(0);
            int num;
            String sum= "";
            switch (c){
                case 'A':
                    System.out.print("请输入一个十进制的数:");
                    num = sc.nextInt();
                    for(int i = tenToTwo(num).length()-1;i>=0;i--){
                        sum+=tenToTwo(num).substring(i,i+1);
                    }
                    System.out.println(num+"(10)→"+sum+"(2)");
                    break;

                case 'B':
                    System.out.print("请输入一个二进制的数:");
                    String twoten = sc.next();
                    System.out.println(twoten+"(2)→"+twoToTen(twoten)+"(10)");
                    break;

                case 'C':
                    System.out.print("请输入一个十进制的数:");
                    int teneight = sc.nextInt();
                    for(int i = tenEight(teneight).length()-1;i>=0;i--){
                        sum+=tenEight(teneight).substring(i,i+1);
                    }
                    System.out.println(teneight+"(10)→"+sum+"(8)");
                    break;

                case 'D':
                    System.out.print("请输入一个八进制的数:");
                    String eightten = sc.next();
                    System.out.println(eightten+"(8)→"+eightTen(eightten)+"(10)");
                    break;

                case 'E':
                    System.out.print("请输入一个十进制的数:");
                    int ten = sc.nextInt();
                    for(int i = Ten(ten).length()-1;i>=0;i--){
                        sum+=Ten(ten).substring(i,i+1);
                    }
                    System.out.println(ten+"(10)→"+sum+"(16)");
                    break;

                case 'F':
                    System.out.print("请输入一个十六进制的数:");
                    String sixteen = sc.next();
                    System.out.println(sixteen+"(16)→"+sixTeen(sixteen)+"(10)");
                    break;

                case 'G':
                    System.out.print("请输入一个二进制:");
                    String two1 = sc.next();
                    int num1 =twoToTen(two1);//二进制到十进制
                    for(int i = tenEight(num1).length()-1;i>=0;i--){
                        sum+=tenEight(num1).substring(i,i+1);
                    }
                    System.out.println(two1+"(2)→"+sum+"(8)");
                    break;

                case 'H':
                    System.out.print("请输入一个八进制的数:");
                    String eight = sc.next();
                    int eight1 =eightTen(eight);
                    for(int i = tenToTwo(eight1).length()-1;i>=0;i--){
                        sum+=tenToTwo(eight1).substring(i,i+1);
                    }
                    System.out.println(eight+"(8)→"+sum+"(2)");
                    break;

                case 'I':
                    System.out.print("请输入一个二进制的数:");
                    String two = sc.next();
                    int two2 =twoToTen(two);
                    for(int i = Ten(two2).length()-1;i>=0;i--){
                        sum+=Ten(two2).substring(i,i+1);
                    }
                    System.out.println(two+"(2)→"+sum+"(16)");
                    break;

                case 'J':
                    System.out.print("请输入一个十六进制:");
                    String sixtwo = sc.next();
                    int tensix = sixTeen(sixtwo);
                    for(int i = tenToTwo(tensix).length()-1;i>=0;i--){
                        sum+=tenToTwo(tensix).substring(i,i+1);
                    }
                    System.out.println(sixtwo+"(16)→"+sum+"(2)");
                    break;

                case 'K':
                    do {
                        System.out.print("确认退出(Y/N):");
                        char out = sc.next().charAt(0);
                        switch (out) {
                            case 'Y':
                                b = false;
                                b1=false;
                                break;
                            case 'N':
                                b1=false;
                                break;
                                default:
                                    b1=true;
                                    System.out.println("**********字母输入有误!请重新输入*************");
                        }
                    }while(b1);
                    break;
                    default:
                        System.out.println("************输入有误!请重新输入*************");
            }
        }while(b);
    }

    //A.十进制>二进制
    private static String tenToTwo(int num){
            String s = "";
            while(num>=2) {
                if (num % 2 == 0){
                    s=s+"0";
                }else{
                    s=s+"1";
                }
                num=num/2;
                if(num<2){
                    s+="1";
                }
            }
            return s;
    }
    //B.二进制>十进制
    private static int twoToTen(String num){
        int sum = 0;
        for(int i = 0;i<num.length();i++){
            sum+=(int)Integer.parseInt(num.substring(i,i+1))*Math.pow(2,num.length()-1-i);
        }
        return sum;
    }

    //C.十进制转换为八进制
    private static String tenEight(int teneight){
        String s = "";
        while(teneight>=8) {
            for(int i =0;i<8;i++){
                if(teneight%8==i){
                    s+=Integer.toString(i);
                    break;
                }
            }
            teneight=teneight/8;
            if(teneight<8){
                s+=Integer.toString(teneight);
            }
        }
        return s;
    }
    //D.八进制转换为十进制
    private static int eightTen(String num){
        int sum = 0;
        for(int i = 0;i<num.length();i++){
            sum+=(int)Integer.parseInt(num.substring(i,i+1))*Math.pow(8,num.length()-1-i);
        }
        return sum;
    }
    //E.十进制转换为十六进制
    private static String Ten(int num){
        String s = "";
        String arr[] = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
        if(num<16){
            s=arr[num%16];
        }
        while(num>=16) {
            for(int i =0;i<16;i++){
                if(num%16==i){
                    s+=arr[i];
                    break;
                }
            }
            num=num/16;
            if(num<16){
                s+=arr[num%16];
            }
        }

        return s;
    }

    //F十六进制转换为十进制
    private static int sixTeen(String num){
        int sum = 0;
        for(int i = 0;i<num.length();i++){
            String ch = num.substring(i,i+1);
            if(ch.equals("a")){
                ch="10";
            }else if(ch.equals("b")){
                ch="11";
            }else if(ch.equals("c")){
                ch="12";
            }else if(ch.equals("d")){
                ch="13";
            }else if(ch.equals("e")){
                ch="14";
            }else if(ch.equals("f")){
                ch="15";
            }
            sum+=(int)Integer.parseInt(ch)*Math.pow(16,num.length()-1-i);
        }
        return sum;
    }
}


猜你喜欢

转载自blog.csdn.net/csdn19970806/article/details/79899334