Java 代码实现进制转换(一)
Java 实现进制转换有现成封装好的类,如 Integer、BigInteger的构造函数等,下面写的是用 java 代码实现进制转换的过程。
(一)十进制 转 二进制、八进制
输入:十进制
输出:二进制、八进制
方法1:十进制 —> 二进制、八进制的统一代码
(1)利用 StringBuffer 长度可变性;
(2)进制转换的特点:除 x 取余,余数逆序输出
(3)余数使用 StringBuffer 存储,并且逆序输出
示例:
// num 表示输入的十进制数 radix 表示 二进制或八进制
public void converse(int num, int radix ) {
StringBuffer sb = new StringBuffer();
while (num != 0) {
sb.append(num % radix);
num /= radix;
}
System.out.println(sb.reverse());
}
// 函数调用:
conerse(6,2); 表示 10 进制的 6 转换为对应的 2 进制数
converse(6,8); 表示 10 进制的 6 转换为对应的 8 进制数
方法2:十进制 —> 二进制、八进制的统一代码
(1)利用链表 ArrayList 动态存储余数
(2)Collection 是 list 的父接口,因此 ArrayList 具有 Collection 的 reverse 属性
(3)数组中的数需要遍历输出
// 使用 ArrayList 实现
// num 表示十进制数 radix 表示 二进制或八进制
public void converse2(int num, int radix) {
ArrayList list = new ArrayList();
while (num != 0) {
list.add(num % radix);
num /= radix;
}
// 数组逆置
Collections.reverse(list);
// 遍历数组,顺序输出
for (Object obj : list) {
System.out.print(obj);
}
}
// 函数调用
conerse(6,2); 表示 10 进制的 6 转换为对应的 2 进制数
converse(6,8); 表示 10 进制的 6 转换为对应的 8 进制数
(二)十进制 转 十六进制
输入:十进制数
输出:十六进制数
方法1:使用 StringBuffer 可变字符序列
区别:不用于二进制、八进制,十六进制需要对余数进行判断,当余数大于10的时候,需要用对应的字母来表示
public void converse16(int num) {
StringBuffer sb = new StringBuffer();
char[] character = new char[]{'a','b','c','d','e','f'};
while (num != 0) {
// 对余数进行判断
if((num % 16) >= 10) {
// 余数大于等于10 获取字符
sb.append(character[num % 16 - 10]);
}else {
sb.append(num % 16);
}
num /= 16;
}
System.out.println(sb.reverse());
}
// 函数调用
conerse16(12); 表示 10 进制的 12 转换为对应的 16 进制数
方法2:使用 ArrayList
(1)利用链表 ArrayList 动态存储余数
(2)Collection 是 list 的父接口,因此 ArrayList 具有 Collection 的 reverse 属性
(3)数组中的数需要遍历输出
public void converse16_2(int num) {
ArrayList list = new ArrayList();
char[] character = new char[]{'a','b','c','d','e','f'};
while (num != 0) {
if(num % 16 >= 10) {
list.add(character[num % 16 - 10]);
}else {
list.add(num % 16);
}
num /= 16;
}
// 数组逆置
Collections.reverse(list);
// 遍历数组,顺序输出
for (Object obj : list) {
System.out.print(obj);
}
}
// 函数调用
conerse16_2(12); 表示 10 进制的 12 转换为对应的 16 进制数