十进制数转(二进制,八进制,十六进制)
写在前面
**本文共涉及两个Java程序(即两个类)
工具类:类中有三个方法,分别用于转换为二,八,十六进制(文末有完整源码)
主程序类:用于调用工具类中的方法来实现十进制数转换(文末有完整源码)
**
进制转换(数学方法)
1、 转换为二进制算法解析
算法源码
// 将x转换为二进制方法
public int Two(int x) {
int t=0;
int a;
for(int i=1;x>0;i=i*10)
{
a=x%2;
x=x/2;
t=t+a*i;
}
return t;
}
依照数学公式,程序中x%2的结果为余数,即二进制中最后一位数字,x=x/2即用新的x求余,最终我们要得出二进制数,就要将余数逆向输出,由于输出后只是表达方式不同(只有0,1),但仍然是十进制数,所以逆向输出就是:第一个得出的余数是个位数,第二个得出余数是十位数。故可以利用累乘10后再累加得出最终的二进制数。
2、 转换为八进制算法解析
算法源码
// 将x转换为八进制方法
public int Eight(int x) {
int t=0;
int a;
for(int i=1;x>0;i=i*10)
{
a=x%8;
x=x/8;
t=t+a*i;
}
return t;
}
八进制数与二进制转换类似,故略,不再详解
3、 转换为十六进制算法解析
算法源码
// 将x转换为十六进制方法
public String Sixteen(int x) {
String t="";
int a;
for(;x>0;)
{
a=x%16;
switch(a)
{
case 10: t="A"+t; break;
case 11: t="B"+t; break;
case 12: t="C"+t; break;
case 13: t="D"+t; break;
case 14: t="E"+t; break;
case 15: t="F"+t; break;
default : t=a+t;
}
x=x/16;
}
return t;
}
由于十六进制的表示方法中超出10的数的表示是由字母表示,
(A:10 B:11 C:12 D:13 E:14 F:15)
所以不能用上述方法解决。
由于涉及字符,所以利用字符串的连接得出十六进制结果。
基本方法依然是求余然后逆向输出余数,只是当遇到余数大于10时利用字符拼接,所以加上**switch(a)**判断拼接的字符,由于是拼接,所以不用累乘,直接得出余数后循环拼接。
上述转换为二进制及八进制的算法也可用字符拼接,比累乘累加简单一点
欢迎评论区评论字符拼接算法
工具类源码
// 工具类
public class BinaryTool {
public int Two(int x) {
int t=0;
int a;
for(int i=1;x>0;i=i*10)
{
a=x%2;
x=x/2;
t=t+a*i;
}
return t;
}
public int Eight(int x) {
int t=0;
int a;
for(int i=1;x>0;i=i*10)
{
a=x%8;
x=x/8;
t=t+a*i;
}
return t;
}
public String Sixteen(int x) {
String t="";
int a;
for(;x>0;)
{
a=x%16;
switch(a)
{
case 10: t="A"+t; break;
case 11: t="B"+t; break;
case 12: t="C"+t; break;
case 13: t="D"+t; break;
case 14: t="E"+t; break;
case 15: t="F"+t; break;
default : t=a+t;
}
x=x/16;
}
return t;
}
}
主程序源码
// 主程序
import java.util.Scanner; //导入Scanner包
public class Shuru {
public static void main(String[] args) {
BinaryTool Tool = new BinaryTool();
Scanner print = new Scanner(System.in);
int x=print.nextInt();
System.out.println(Tool.Two(x));
System.out.println(Tool.Eight(x));
System.out.println(Tool.Sixteen(x));
}
}