十进制与其它进制(整数)转换编程

标签: java  二进制  进制转换

十进制与其它进制(整数)转换编程

一、十进制转为其它进制(整数)

1、原理

十进制转为其它进制:十进制数除其它进制(2,8,或者16等)取余法

例子:

十进制转为二进制,八进制或者十六进制方法一样。

在此只以十进制转为二进制为例子

图片来源:

百度经验:二进制、八进制、十进制、十六进制之间的转换

网址:

https://jingyan.baidu.com/article/495ba84109665338b30ede98.html


2、代码实现

(1)代码

package wrapper;

/*

 * 10进制转为其它进制

 */

public class RadixChange {

 

    public static void main(String[] args) {

 

       System.out.println("10进制转为其它进制测试");

       System.out.println("--------------------------------------");

       TenRadixToOtherRadixTest();//10进制转为其它进制测试

    }

   

    //10进制转为其它进制测试

    public static void TenRadixToOtherRadixTest() {

       int num=97;//数字

       int adix2=2;//进制

       int radix8=8;//8进制

       int radix16=16;//16进制    

       //10进制数字转为其它进制,并以字符串形式输出

       String change=TenRadixToOtherRadix(num,radix2);//10进制-->2进制

       System.out.println("10进制数字:"+num+",  转化为"+radix2+"进制数字:"+change);

       change=TenRadixToOtherRadix(num,radix8);//10进制-->8进制

       System.out.println("10进制数字:"+num+",  转化为"+radix8+"进制数字:"+change);

       change=TenRadixToOtherRadix(num,radix16);//10进制-->16进制

       System.out.println("10进制数字:"+num+",  转化为"+radix16+"进制数字:"+change);

    }

 

    /*

     * 10进制转为其它进制,并以字符串形式输出

     * 原理:根据其它进制转为10机制的除法以及取余数,然后将余数逆序输出,得到10进制结果

     * 1、被除数(div1) 除以除数(div2) ,结果为div1

     * 3、取模运算,被除数(div1)%除数div2,即:result.insert(0,div1%div2),将div1%div2的结果拼接到result的最前面,

     *   目的只有有个,就是为了逆序输出

     * 2、除数div2始终为进制raidx

     * 3、当被除数div1为0时,停止除法运算

     */

    private static String TenRadixToOtherRadix(int num, int radix) {

       StringBuilder result=new StringBuilder();//结果

       int div1=num;//被除数

       int div2=radix;//除数

       //循环终止条件:div1为0

       while(div1!=0){

           result.insert(0, div1%div2);//将余数逆序输出

           div1=div1/div2;

       }

       return result.toString();

    }

}

(2)结果

10进制转为其它进制测试

--------------------------------------

10进制数字:97, 转化为2进制数字:1100001

10进制数字:97, 转化为8进制数字:141

10进制数字:97, 转化为16进制数字:61

(3)包装类Integer实现,只需调用方法

说明:方法Integer.toxxxString(num)  其它进制-->十进制

xxx代表进制,num代表十进制数

【1】代码

// 十进制-->其它进制

    public static void tenRadixToOtherRadix() {

       System.out.println("十进制-->其它进制");

       System.out.println("----------------------------------------");

       // 以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式

       System.out.println("10进制-->2进制:"+Integer.toBinaryString(97));// 10进制-->2进制

       // 以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。

       System.out.println("10进制-->8进制:"+Integer.toOctalString(97));// 10进制-->8进制

       // 以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。

       System.out.println("10进制-->16进制:"+Integer.toHexString(97));// 10进制-->16进制

       System.out.println("----------------------------------------");

    }


【2】结果

十进制-->其它进制

----------------------------------------

10进制-->2进制:1100001

10进制-->8进制:141

10进制-->16进制:61

----------------------------------------

二、其它进制转为十进制(整数)

1、原理

其它进制转为十进制:把其它进制按权展开,相加即得十进制数

例子:

二进制,八进制或者十六进制转为十进制方法一样。

在此只以二进制转为十进制为例子

图片来源:

百度经验:二进制、八进制、十进制、十六进制之间的转换

网址:

https://jingyan.baidu.com/article/495ba84109665338b30ede98.html

2、代码实现

(1)代码

package wrapper;

/*

 * 其它进制转为10进制

 */

public class RadixChange2 {

 

    public static void main(String[] args) {

       System.out.println("其它进制转为10进制测试");

       System.out.println("--------------------------------------");

       OtherRadixToTenRadixTest();//其它进制转为10进制测试

    }

 

    //其它进制转为10进制测试

    public static void OtherRadixToTenRadixTest() {

       int num2=1100001;//2进制数字

       int num8=141;//8进制数字

       int num16=61;//16进制数字

      

       int radix2=2;//进制

       int radix8=8;//8进制

       int radix16=16;//16进制

      

       //其它进制转为10进制数字,并以字符串形式输出

       String change=OtherRadixToTenRadix(num2,radix2);//2进制-->10进制

       System.out.println(radix2+"进制数字:"+num2+",  转化为10进制数字:"+change);

      

       change=OtherRadixToTenRadix(num8,radix8);//8进制-->10进制

       System.out.println(radix8+"进制数字:"+num8+",  转化为10进制数字:"+change);

      

       change=OtherRadixToTenRadix(num16,radix16);//16进制-->10进制

       System.out.println(radix16+"进制数字:"+num16+",  转化为10进制数字:"+change);

    }

 

    /*

     * 其它进制转为10进制数字,并以字符串形式输出

     * 分析:

     * 1、将数字变成字符串s,然后从0索引开始,依次获取每个字符ch=charAt(i)

     * 2、将获取的每个字符变成数字num,即:用Integer对象将字符转为整数

     *                               即:int num=Integer.parseInt(ch+"");//字符变为整数

     *    

     *    result:是数字num的相关进制的幂运算乘积结果,all为之中所求结果

     * 3、将数字num进行运算,即:result=num*Math.pow(radix,s.length()-1-i),然后执行all=all+result;

     * 4、停止条件是获取字符结束

     *

     * 原理:

     *    其它进制转为10进制,就是把其它进制的数值的每个数值位提取出来,(建设数值位数为n位)

     *    即:取到第i个数值位,将相应乘以进制的(n-i)次幂,得到结果为result;

     *    假设要求得10进制结果为all,初始时all为0,

     *    然后每获得一次result,都进行一次操作,all=all+result。

     *    最终所得即为所求结果。

     */

    public static String OtherRadixToTenRadix(intn, intradix) {

       String s=n+"";

       int all=0;//最终进制转化结果

       for(inti=0;i<s.length();i++){

           char ch=s.charAt(i);//获取字符

           int num=Integer.parseInt(ch+"");//字符变为整数

//         int num=(int)ch;//字符---》数字 失败,不行

           //字符  1 转为了num=49,而不是num=1

           int result=num*(int) (Math.pow(radix,s.length()-1-i));

           all=all+result;

       }

       return all+"";

    }

}


(2)结果

其它进制转为10进制测试

--------------------------------------

2进制数字:1100001, 转化为10进制数字:97

8进制数字:141, 转化为10进制数字:97

16进制数字:61, 转化为10进制数字:97

(3)包装类Integer实现,只需调用方法

说明:方法Integer.parseInt("num",radix))    其它进制-->十进制

radix表示进制,num表示radix进制的数

【1】代码

// 其它进制-->十进制

    public static void otherRadixToTenRadix() {

       System.out.println("其它进制-->十进制");

       System.out.println("----------------------------------------");

       System.out.println("2进制-->10进制"+Integer.parseInt("1100001", 2));// 2进制-->10进制

       System.out.println("8进制-->10进制"+Integer.parseInt("141", 8));// 8进制-->10进制

       System.out.println("16进制-->10进制"+Integer.parseInt("61", 16));// 16进制-->10进制

       System.out.println("----------------------------------------");

    }


【2】结果

其它进制-->十进制

----------------------------------------

2进制-->10进制97

8进制-->10进制97

16进制-->10进制97

----------------------------------------

三、参考文章

1、整数的进制转换可以详细参考这篇文章

百度经验:二进制、八进制、十进制、十六进制之间的转换

网址:

https://jingyan.baidu.com/article/495ba84109665338b30ede98.html

 

2、小数以及负整数的求法可以看这里

百度经验:二进制如何转十进制,十进制如何转二进制

网址:

https://jingyan.baidu.com/article/597a0643614568312b5243c0.html

说明:其中这篇文章的图8是错误的,一方面没有清楚表达11101011这个数(是原码,补码,还是反码???),然后过程也是不正确的,导致最终结果不正确。



11101011的计算结果

 

额外说明:该文的图4是正确的,是图8求解的逆过程


3、负数的二进制

百度经验:负数的二进制

网址:

https://jingyan.baidu.com/article/29697b9106eb52ab21de3c7a.html

负数的二进制的正确求法看这里,通过对比第二个参考文章,我们可以知道第二个参考文章的错误地方,以及负数二进制是如何计算的。

4、小数的进制转换

参考来源:博客园

博主:Mr.Rico

博文:转:十进制小数转化为二进制小数

网址:http://www.cnblogs.com/xkfz007/articles/2590472.html

小数的二进制的详细求解可以看这里

版权声明:本文为a15920804969原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a15920804969/article/details/78392397