十进制与其它进制(整数)转换编程
一、十进制转为其它进制(整数)
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
小数的二进制的详细求解可以看这里