扫一扫,加我们为好友有惊喜哦~
-->

核心课程
开班动态
专题服务

您当前所在位置:首页 > 中心动态 >>
[常州Java培训]2进制,8进制,16进制转换大全

常州Java培训学习课程报名咨询:常州文化宫校区:0519-69886161、新北校区:0519-68877558!

1、十进制和二进制的互换
public class Main {

    /**
     * 将十进制转换为2进制
     */
    public static String getNum(long n) {
        String r = "";

        long x;// 存放除以2的余数
        while (n != 0) {
            x = n % 2;
            r = x + r;
            n = n / 2;
        }

        return r;
    }

    /**
     * 二进制转10进制
     */
    public static long getNum02(String s) {
        long r = 0;

        long t = 1;// 2的n次方
        char c;
        for (int i = s.length() - 1; i >= 0; i--) {
            c = s.charAt(i);
            r = r + (c - 48) * t;
            t = t * 2;
        }

        return r;
    }

    /**
     * 10进制转8进制
     */
    public static String getEight(long n) {
        String r = "";

        long x;// 存放除以8的余数
        while (n != 0) {
            x = n % 8;
            r = x + r;
            n = n / 8;
        }

        return r;
    }
   
    /**
     * 10进制转16进制
     */
    public static String getSixteen(long n){
        String r = "";

        long x;// 存放除以16的余数
        char c;//存放余数,但可能余数是10~15之间的数
        while (n != 0) {
            x = n % 16;//10~15
            if(x < 10){
               r = x + r;
            }else{
                //代表x的值10~15
                c = (char)(x + 55);
                r = c + r;
            }
            n = n / 16;
        }

        return r;
    }
   
    /**
     * 八进制转10进制(如何避免输入参数不是八进制的问题?)
     * @return
     */
    public static long eightToTen(String s){
        long r = 0;

        long t = 1;// 8的n次方
        char c;
        for (int i = s.length() - 1; i >= 0; i--) {
            c = s.charAt(i);
            r = r + (c - 48) * t;
            t = t * 8;
        }

        return r;
    }
   
    /**
     * 十六进制转10进制(如果s不是16进制呢?)
     * @param s
     * @return
     */
    public static long sixteenToTen(String s){
        long r = 0;

        long t = 1;// 16的n次方
        char c;
        for (int i = s.length() - 1; i >= 0; i--) {
            c = s.charAt(i);
            if(c >= '0' && c <= '9'){
               r = r + (c - 48) * t;
            }else{
                //c:A~F
               r = r + (c - 55) * t;
            }
            t = t * 16;
        }

        return r;
    }

    public static void main(String[] args) {
//        System.out.println(getEight(1230));
//        System.out.println(getSixteen(1230));
        System.out.println(eightToTen("127"));
        System.out.println(sixteenToTen("4CE2F"));
    }
}

进制的应用:用来标示权限,如:E(16进制) -> 1110(每一位标示一个权限)

2、十进制和P进制的互换
    /**
     * 将10进制的数n转换为p进制的数
     * @param n  10进制
     * @param p  2、8、16
     * @return
     */
    public static String getPNum(long n,int p){
        String r = "";

        long x;// 存放除以p的余数
        char c;//存放余数,但可能余数是10~15之间的数
        while (n != 0) {
            x = n % p;//10~15
            if(x < 10){
               r = x + r;
            }else{
                //代表x的值10~15
                c = (char)(x + 55);
                r = c + r;
            }
            n = n / p;
        }

        return r;
    }
   
    /**
     * 将P进制,转成10进制(如何验证P进制对应数字的准确性)
     * 如果P进制对应的数是不对的,则返回 -1
     */
    public static long getTenNum(String s,int p){
        long r = 0;

        long t = 1;// 16的n次方
        char c;
        for (int i = s.length() - 1; i >= 0; i--) {
            c = s.charAt(i);
            if(c >= '0' && c <= '9'){
               r = r + (c - 48) * t;
            }else{
                //c:A~F
               r = r + (c - 55) * t;
            }
            t = t * p;
        }

        return r;
    }

3、P进制转10进制,验证P进制的字符串是有效的(2进制不能是"123",8进制不能是"890",16进制不能是"2EX")

    /**
     * 将P进制,转成10进制(如何验证P进制对应数字的准确性) 如果P进制对应的数是不对的,则返回 -1
     */
    public static long getTenNum(String s, int p) {
        long r = 0;

        long t = 1;// 16的n次方
        char c;
        for (int i = s.length() - 1; i >= 0; i--) {
            c = s.charAt(i);
            if (c >= '0' && c <= '9') {
                r = r + (c - 48) * t;
            } else {
                // c:A~F
                r = r + (c - 55) * t;
            }

            // 验证c如果不满足P进制的标准
            // if(p == 2 && "01".contains(c+"") == false)
            if ((p == 2 && !"01".contains(c + ""))
                    || (p == 8 && !"01234567".contains(c + ""))
                    || (p == 16 && !"0123456789ABCDEF".contains(c + ""))) {
                r = -1;
                break;
            }

            t = t * p;
        }

        return r;
    }

4、八进制转换二进制的算法
算法:将每一位八进制数转换成对应的二进制,不够3位补0,再将结果连成字符串即可!

例子:
1670 八进制转二进制
-> 001 110 111 000

1101110010 -> 二进制八进制
001 101 110 010
1562

    /**
     * 将一个数转换为对应的二进制
     * @param n
     * @return
     */
    public static String getBin(int n){
        String r = "";
       
        int t;
        while(n != 0){
            t = n % 2;
            n = n / 2;
            r = t + r;
        }
       
        //不够3位补0
        if(r.length() == 1){
            r = "00" + r;
        }else if(r.length() == 2){
            r = "0" + r;
        }else if(r.length() == 0){
            r = "000";
        }
       
        return r;
    }
   
    /**
     * 将8进制的数转换为对应的2进制
     * @param s
     * @return
     */
    public static String eightToBin(String s){
        String r = "";//char c = '';语法错误 char c = '\0'; 空字符
       
        //读取每一位8进制,转换为对应的二进制
        char c;
        for(int i = 0;i < s.length();i++){
            c = s.charAt(i);//截取每个字符
            r += getBin(c - 48);
        }
       
        //如果字符串的第一位是0,则截取
        while(r.charAt(0) == '0' && r.length() > 1){
            r = r.substring(1, r.length());
        }
       
        return r;
    }

    public static void main(String[] args) {
        System.out.println(eightToBin("0"));
    }

5、二进制转换为8进制
    /**
     * 将2进制转换为8进制
     * @param s
     * @return
     */
    public static String bintoEight(String s){
        String r = "";
        //考虑补0的问题
        if(s.length() % 3 == 1){
            s = "00" + s;
        }else if(s.length() % 3 == 2){
            s = "0" + s;
        }
       
        //每3位一个单元,转换为八进制数(实际上就是按照转换10进制的算法做即可)
        String t = "";//存放3位一个单元的结果
        int x;//计算3位的二进制对应的10进制
        for(int i = 0;i < s.length();i++){
              t = t + s.charAt(i);
             
              //当t的长度为3,则满足一个单元计算
              if(t.length() == 3){
                  x = (t.charAt(0) - 48) * 4 + (t.charAt(1) - 48) * 2 + (t.charAt(2) - 48);
                  r = r + x;
                  t = "";
              }
        }
        return r;
    }

    public static void main(String[] args) {
        System.out.println(bintoEight("1101110010"));
    }
作业:
1、问题:如果给定一位16进制数,第一位二进制标示读取,第二位增加,第三位标示修改,第四位表示删除,请判断其具备什么权限?

2、问题:请设计算法,计算二进制和16进制的互换!


精彩文章推荐
【常州电脑培训】移动营销未来蓝海[2014-5-21]
常州东方博宜多媒体课程培训【学员案例】[2013-12-30]
【常州淘宝培训】如何打造爆款?[2013-9-25]
常州淘宝培训:淘宝店铺应该如何装修?[2012-8-13]
海盗分金子、猴子分桃的逻辑思考[2012-7-1]
《3D泰坦尼克号》上映引发网络上的木马爆发[2012-4-12]
常州CAD培训——高级AutoCAD工程师绘图技巧(9)[2012-2-2]
总线故障的维修原则,改变登录界面的背景色-无锡计算机培训[2011-10-26]


返回顶部