Java关于十进制转各种进制的原理分析及源码
本篇文章详细到位地介绍进制之间的转换,并且附上了Java代码(其他语言类似),以便读者更好理解进制之间的转换,并且能够通过笔者提供的源码进行快速准确的进制转化,希望能帮助到大家。
这里再提供一些二进制、八进制、十六进制的网站,供读者前往学习哦!
十进制转二进制
首先,十进制转换为二进制的时候,整数部分和小时部分的转换是不一样的。
整数部分:首先对十进制数(如图所示的29),进行除2并取余,将余数写到右边,将得到的商不断进行之前的操作,直到商为0。最后得到的二进制数就是,将得到的余数从下往上读。
小数部分:如第二例子所示,我们将要进行转换的十进制小数进行乘二取整,就是乘2得到的数的个位作为右边的得数,并且将各个位恢复成0,继续之前的操作,直到小数部分为0。从上往下念就是我们要转换的二进制数啦。
十进制转八进制
做法和十进制转换为二进制的差不多,只是将除数二变为8罢了。
十进制转十六进制
做法和十进制转换为二进制的差不多,只是将除数二变为16罢了。
还有一个要注意的点是:十六进制发表示,0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,FF,分别表示1-16。
各种进制向十进制的转换
前面介绍了各种十进制转其他进制的方法,为了文章的完整性和补充,这里再介绍一下其他进制向十进制的转换方法。
上图是二进制转十进制的方法,其他进制十进制时,只要将上图所示公式中的底数2改成相应的进制;比如二进制是2^(n-1);
八进制是8^(n-1);
十六进制是16^(n-1);
举几个例子来看看吧,对于二进制数110101:x = 1 + 02 + 122 + 0222 + 12222 + 122222;
八进制数721:x = 1 + 28 + 788;
十六进制数A962:x = 2 + 6*16 + 9 * 16 *16 + 10 *16 *16 *16;(A十六进制中A表示10)
这个的代码笔者也加到了上面的源码中,加了注释。有需要的读者可以去复制下来学习使用。
package monster;
/*
* 该程序用来实现进制之间的转换
* 有二进制、八进制、十进制和十六进制
*/
import java.util.*;
public class Conversion {
public static void main(String[] args) {
Conversion a = new Conversion(); // 申明对象
System.out.println("please input an decimal number to change:");
Scanner in = new Scanner(System.in);
int num = in.nextInt();
a.binary(num); // 调用对象的方法
a.octal(num);
a.hexadecimal(num);
in.close();
}
public void binary(int num){
// 十进制转二进制
System.out.println("the reverse binary number is:");
while(true){
System.out.print((num%2) +" ");
num = num/2;
if(num == 0) {
break;
}
}
System.out.println();
}
public void octal(int num){
// 十进制转八进制
System.out.println("the decimal number is:");
while(true){
System.out.print((num%8) +" ");
num = num/8;
if(num == 0) {
break;
}
}
System.out.println();
}
public void hexadecimal(int num){
// 十进制转十六进制
System.out.println("the hexadecimal number is:");
while(true){
System.out.print((num%16) +" ");
num = num/16;
if(num == 0) {
break;
}
}
System.out.println();
}
}
下面是代码结果: