java-十进制、八进制、十六进制数互相转换

懒人不愿做题,所有的东西都用程序跑出来是最好的,下面做一个十进制、八进制、十六进制数互相转换的小程序

public class JZTurn {

 

    public static void main(String[] args) {

        int num2 = 1314521;

        System.out.println("十进制数:"+num2);

        System.out.println("十进制转换二进制:"+turn2(num2));

        System.out.println("十进制转换八进制:"+turn8(num2));

        System.out.println("十进制转换十六进制:"+turn16(num2));

         

        //2-> 8

        System.out.println("二进制转换八进制:"+twoTurnEight(turn2(num2)));

        System.out.println("八进制转换二进制:"+eightTurnTwo(turn8(num2)));

        System.out.println("八进制转换十六进制:"+eightTurnSixteen(turn8(num2)));

        //2->16

        System.out.println("二进制转换十六进制:"+twoTurnSixteen(turn2(num2)));

    }

     

    /**

     * 10进制转二进制

     * @param num

     * @return

     */

    public static String turn2(int num){

        String shortTimeNum = "";

        int remainder = 0;

        /**

         * 模拟短除法

         */

        while(num >= 1){

            remainder = num % 2;

            num = num / 2;

            shortTimeNum = remainder + shortTimeNum;

        }

         

        return shortTimeNum;

    }

     

    /**

     * 10进制转8进制

     * @param num

     * @return

     */

    public static String turn8(int num){

        String shortTimeNum = "";

        int remainder = 0;

        /**

         * 模拟短除法

         */

        while(num >= 1){

            remainder = num % 8;

            num = num / 8;

            shortTimeNum = remainder + shortTimeNum;

        }

         

        return shortTimeNum;

    }

     

    /**

     * 10进制转16进制

     * @param num

     * @return

     */

    public static String turn16(int num){

        String shortTimeNum = "";

        int remainder = 0;

        String tempStr = "";

        /**

         * 模拟短除法

         */

        while(num >= 1){

            remainder = num % 16;

            tempStr = getOtherNum(remainder);

             

            num = num / 16;

            shortTimeNum = tempStr + shortTimeNum;

        }

         

        return shortTimeNum;

    }

     

    /**

     * 2进制转换8进制

     * 概念说明:这里转换的是整数,从右向左三位一组分别乘以2的零次方,2的一次方,2的2次方

     * 然后把每组中的数相加,再把各组从左向右拼接到一起

     * @param strNum2

     */

    public static String twoTurnEight(String strNum2){

        String resultNum = "";

        int remainder = strNum2.length() % 3;

         

        //补位 三位一组,最后一组位数不够用0补充

        switch(remainder){

        case 1:

            strNum2 = "00"+strNum2;

            break;

        case 2:

            strNum2 = "0"+strNum2;

            break;

        }

        int index = strNum2.length()-1;

        int tempNum1 = 0;

        int tempNum2 = 0;

        int tempNum3 = 0;

        while(index>=1){

 

            index -- ;

             

            if(index % 3 == 0){

                //每个数为一组

                tempNum1 = Integer.parseInt(strNum2.substring(index, index+1));

                tempNum2 = Integer.parseInt(strNum2.substring(index+1, index+2));

                tempNum3 = Integer.parseInt(strNum2.substring(index+2, index+3));

                 

                resultNum = tempNum3*1+tempNum2*2+tempNum1*4+resultNum;

                 

            }

             

        }

         

        return resultNum;

    }

     

    /**

     * 八进制转换二进制

     * @param eightNum

     * @return

     */

    public static String eightTurnTwo(String eightNum){

        String twoNum = "";

        int index = eightNum.length()-1;

         

        String tempNum = "";

        while(index>=0){

             

            tempNum = turn2(Integer.parseInt(eightNum.substring(index, index+1))) ;

             

            //补位,在转换8进制时是每三为二进制数为一组,转换回二进制时位数也需要是三位,不够用零补

            switch (tempNum.length()) {

             

            case 1:

                tempNum = "00"+tempNum;

                break;

 

            case 2:

                tempNum = "0"+tempNum;

                break;

            }

             

            twoNum = tempNum + twoNum;

            index--;

        }

         

        return twoNum;

    }

     

    /**

     * 2进制转换16进制

     * 概念说明:这里转换的是整数,从右向左四位一组分别乘以2的零次方,2的一次方,2的2次方,2的3次方,

     * 然后相加把每组最终的得数一次从左向右拼到一起,若其中一组的和大于9,按照对应关系转换后再把每组的结果拼接到一起

     * @param strNum2

     */

    public static String twoTurnSixteen(String strNum2){

        String resultNum = "";

        int remainder = strNum2.length() % 4;

         

        //补位,四位一组,最后一组位数不够用0补充

        switch(remainder){

        case 1:

            strNum2 = "000"+strNum2;

            break;

        case 2:

            strNum2 = "00"+strNum2;

            break;

        case 3:

            strNum2 = "0"+strNum2;

            break;

        }

        int index = strNum2.length()-1;

        int tempNum1 = 0;

        int tempNum2 = 0;

        int tempNum3 = 0;

        int tempNum4 = 0;

        int tempNum5 = 0;

        while(index>=1){

 

            index -- ;

             

            if(index % 4 == 0){

                //每个数为一组

                tempNum1 = Integer.parseInt(strNum2.substring(index, index+1));

                tempNum2 = Integer.parseInt(strNum2.substring(index+1, index+2));

                tempNum3 = Integer.parseInt(strNum2.substring(index+2, index+3));

                tempNum4 = Integer.parseInt(strNum2.substring(index+3, index+4));

                 

                tempNum5 = tempNum4*1 + tempNum3*2+tempNum2*4+tempNum1*8;

                 

                resultNum = getOtherNum(tempNum5) +resultNum;

                 

            }

             

        }

         

        return resultNum;

    }

     

    /**

     * 8进制转换16进制

     * @param strNum2

     */

    public static String eightTurnSixteen(String strNum2){

        return twoTurnSixteen(eightTurnTwo(strNum2));

    }

     

    /**

     * 16进制转换中的特殊处理,需要把大于9的数字转换成字母

     * @param tempNum

     * @return

     */

    public static String getOtherNum(int tempNum){

        String tempStr = "";

        if(tempNum > 9){

            switch(tempNum){

            case 10:

                tempStr = "A";

                break ;

            case 11:

                tempStr = "B";

                break;

            case 12:

                tempStr = "C";

                break;

            case 13:

                tempStr = "D";

                break;

            case 14:

                tempStr = "E";

                break;

            case 15:

                tempStr = "F";

                break;

            }

        }else{

            tempStr = String.valueOf(tempNum);

        }

        return tempStr;

    }

}

输出结果:

十进制数:1314521
十进制转换二进制:101000000111011011001
十进制转换八进制:5007331
十进制转换十六进制:140ED9
二进制转换八进制:5007331
八进制转换二进制:101111011011001
八进制转换十六进制:5ED9
二进制转换十六进制:140ED9

**********************************没有优化程序性能,有时间再改*********************************

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值