进制转换

import java.util.Arrays;
class ArrayTest7{
    public static void main(String[] args){
        int num = 60;

        String str_bin = toBinary(num);
        String str_oct = toOctall(num);
        String str_hex = toHex(num);
        System.out.println("bin:"+str_bin);
        System.out.println("oct:"+str_oct);
        System.out.println("hex:"+str_hex);
        //Java已经提供的功能。
        System.out.println(Integer.toBinaryString(60));
        System.out.println(Integer.toOctalString(60));
        System.out.println(Integer.toHexString(60));

    }
    //十进制   二进制
    public static String toBinary(int num){
        return trans(num, 1, 1);
    }

    //十进制   八进制
    public static String toOctall(int num){
        return "0"+trans(num, 7, 3);
    }

    //十进制   十六进制
    public static String toHex(int num){
        return "0x"+trans(num, 15, 4);
    }
        /*
        进制转换  终结版
    需求;十进制》》》十六进制   输出一个字符串
    那我们  十进制   二进制
                    num & 1
                    num >>> 1

                    十进制   八进制
                    num & 7
                    num >>> 3
    那我们是不是 可以再传2个数据过去呢,直接实现所有的进制转换呢?
    int num     int base基数   int offset偏移量
    */
    //定义一个功能进行字符转换
    public static String trans(int num, int base, int offset){
        //1.建立表   也就是对应关系
        char[] chs = {'0','1','2','3',
                                    '4','5','6','7',
                                    '8','9','A','B',
                                    'C','D','E','F',};
        //2.建立一个临时容器
        char[] arr = new char[8];
        //3.定义一个角标
        int index = arr.length;
        //4.通过循环 对num进行&  >>>运算
        while (num != 0){
            //5.进行&运算
            int temp = num & base;
            //通过角标  进行索引 查出表中对应的字符 存到临时容器中
            arr[--index] = chs[temp];
            //7. 进行>>>运算    
            num = num >>> offset;
        }
        return toString(arr, index);//把数组和 数组开始存储的有效位置发过去
    }
    //定义一个功能实现数组转字符串的功能
    public static String toString(char[] arr, int index){
        String temp = "";

        for (int x=index; x<arr.length; ++x){
            temp = temp + arr[x];
        }
        return temp;
    }

}                   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值