进制转换
什么是进制转换?
- 进制转换是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。位权是指,进位制中每一固定位置对应的单位值。* 这里面讲了符号、基数、位权、让我们来一一解释这些都是什么吧。
符号是什么呢?
符号就是每个进制的数字,比如 二进制 = 10011,这串就是符号。
- 二进制的符号是0-1
- 十进制的符号是0-9
- 十六进制的符号就是0-9 A-F(A-F 分别表示 10 到 15)
- 八进制的符号就是0-7
那什么是基数呢?
基数就是进制的数字,比如二进制的基数就是2了,这样下去以此类推。
那什么是位权呢?
位权就是每个进制从右到左数数,就比如10011,从右到数,因为计算机是从0开始的所以从右到左数就是0 1 2 3 4,这就是位权
二进制转十进制
就是每一位的符号 x 基数的位权幂,例如:二进制 1101 转十进制:
从左边第一个符号是1乘以基数是2的3次幂(位权)
十进制转二进制呢?
这种就不是通过上面进行运算操作了,这种是通过通过不断取模和整除的,就是通过不断地 除以基数(2)并记录余数 来实现的
例如:13
- 13/2(基数) = 6 余 1
- 6/2(基数) = 3 余 0
- 3/2(基数) = 1 余 1
- 1/2(基数) = 0 余 1
结果:从低位到高位,余数依次是 1, 0, 1, 1,反转后为 1101。
那可能有人问了,如果是负数的呢?那就进行补码取反再+1
十六进制转十进制
也是跟上面差不多就是,16进制从10开始都是以大写A-F,例如:十六进制 1A3 转十进制:
十进制转十六进制
通过不断取模和整除的方式:
- 用
十进制数 ÷ 16,记录余数(大于 9 的余数用A-F表示)。 - 继续对商进行除 16,直到商为 0。
- 将所有余数反向排列,得到十六进制表示。
例如:十进制 419 转十六进制:
- 419÷16=26 余 3;
- 26÷16=1,余 10(对应
A); - 1÷16=0,余 1。
结果:将余数反转,得到十六进制 1A3。
那二进制转十六进制呢
每 4 位二进制为一组,从右向左分组,转换为对应的十六进制数字。 例如:二进制 11010011 转十六进制:
- 分组:
1101和0011; - 转换:
1101 = D,0011 = 3。
结果:十六进制为 D3。
八进制的计算类似
- 转十进制:每一位乘以 8 的幂,再相加。
- 转其他进制:先转十进制,再按上述方法转换。
那可能有人说了,Java中进制转换是怎么转换的呢?使用的是什么方法呢?
可以直接使用Integer.parseInt这个方法:
public class BaseConversion{
public static void main(String[] args){
//二进制转十进制
int binaryToDecimal = Integer.parseInt("1101",2);
System.out.println("二进制1101转十进制:" + binaryToDecimal);//输出13
// 八进制转十进制
int octalToDecimal = Integer.parseInt("15", 8);
System.out.println("八进制 15 转十进制: " + octalToDecimal); // 输出 13
// 十六进制转十进制
int hexToDecimal = Integer.parseInt("1A3", 16);
System.out.println("十六进制 1A3 转十进制: " + hexToDecimal); // 输出 419
}
}
十进制转其他进制
使用 Integer.toBinaryString、toOctalString、toHexString 方法:
public class DecimalToOtherBase {
public static void main(String[] args) {
int decimal = 13;
// 十进制转二进制
String binary = Integer.toBinaryString(decimal);
System.out.println("十进制 13 转二进制: " + binary); // 输出 1101
// 十进制转八进制
String octal = Integer.toOctalString(decimal);
System.out.println("十进制 13 转八进制: " + octal); // 输出 15
// 十进制转十六进制
String hex = Integer.toHexString(decimal);
System.out.println("十进制 13 转十六进制: " + hex); // 输出 d
}
}
二进制直接转十六进制
可以先转为十进制,再转为十六进制:
public class BinaryToHex {
public static void main(String[] args) {
String binary = "1101";
// 二进制转十进制
int decimal = Integer.parseInt(binary, 2);
// 十进制转十六进制
String hex = Integer.toHexString(decimal);
System.out.println("二进制 1101 转十六进制: " + hex); // 输出 d
}
}