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 进制数