Java进制转换
文章目录
前言
这篇是补前面基本语法与数组的结合题目(进制转换),同时也记录下进制的知识点。
一、进制知识点
1.1 进制
- 世界上有10种人 ,认识和不认识二进制的。
- 所有数字在计算机底层都以二进制形式存在。计算机以二进制 “补码” 的形式保存所有的整数。
1.2 整数的进制表示方式
- 二进制(binary):0,1 ,满2进1;以0b或0B开头。(最高位区分正负数:0正数; 1负数)(正数三码一样)(负数三码不一样)
- 原码:直接将一个数值换成二进制数。最高位是符号位。
- 负数的反码:是对原码按位取反,只是最高位(符号位)确定为1。
- 负数的补码:其反码加1。
- 十进制(decimal):0-9 ,满10进1。
- 八进制(octal):0-7 ,满8进1;以数字0开头表示。
- 十六进制(hex):0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。如:0x21AF +1= 0X21B0
二、进制之间的转换
2.1 基本转换
- 十进制与二进制转换
- 二进制转换成十进制,乘以2的幂数。
- 十进制转换成二进制,除以2取余数。
- 二进制与八进制转换
- 二进制与十六进制转转
- 十进制与八进制转换
- 十进制与十六进制转换
2.2 短除法
- 以二进制为例,短除法取余再取逆;如图:
- 12(十进制)转换为二进制 1100(二进制)。
三、Java实现进制转换
3.1 方法一:数组+短除法
- 直接贴代码
/**
* 短除法取余数逆实现进制转换
* @param num : 需要转换的十进制数
* @param radix : 转换成的进制
*/
public static void systemConversion(int num, int radix) {
System.out.println(num + "转换成" + radix + "进制");
char[] ch = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
char[] arr = new char[32];
int pos = 32; //索引
while(num > 0){
arr[--pos] = ch[num % radix];
num /= radix;
}
System.out.print(radix + "进制: ");
for(int i = pos; i < 32; i++) {
System.out.print(arr[i]);
}
}
3.2 方法二:StringBuilder+短除法
- 代码
/**
* 使用StringBuilder类实现进制转换
* @param num : 需要转换的十进制数
* @param radix : 转换成的进制
*/
public static void systemConversionPlus(int num, int radix) {
//StringBuilder提供append和insert方法,类似Python里面的列表
StringBuilder sb = new StringBuilder();
char[] ch = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
while(num > 0) {
sb.append(ch[num % radix]); //将短除法得到的余数存入缓存区
num /= radix;
}
System.out.print("\n" + radix + "进制: ");
System.out.println(sb.reverse().toString());
}
总结
以上是对Java基本语法和数组学习过程中的一个知识点补充,进制转换在实际应用当中并不是很常见,但是了解进制的知识点与其之间的转换规则是一个程序员必备的功底。