Java 进制理解与进制转换详解
1. 引言
在编程中,理解进制系统是非常重要的。计算机底层使用二进制进行数据存储和运算,但我们日常使用的数字是十进制数。因此,在编程过程中,经常需要进行不同进制之间的转换。本文将详细介绍常见的进制系统及其在 Java 中的表示和转换方法。
2. 什么是进制?
进制(Base or Radix)是指一种计数系统中数字符号的总数。最常见的进制系统包括二进制、十进制、八进制和十六进制。
2.1 二进制(Binary,Base-2)
- 表示方式:使用
0
和1
两个符号。 - 应用:计算机的底层数据存储和处理。
- 示例:
1011
(二进制)表示为十进制为11
。
2.2 十进制(Decimal,Base-10)
- 表示方式:使用
0
到9
这十个符号。 - 应用:日常生活中最常用的进制系统。
- 示例:
123
(十进制)表示为十进制的123
。
2.3 八进制(Octal,Base-8)
- 表示方式:使用
0
到7
这八个符号。 - 应用:历史上用于计算机系统,现在较少使用。
- 示例:
17
(八进制)表示为十进制为15
。
2.4 十六进制(Hexadecimal,Base-16)
- 表示方式:使用
0
到9
和A
到F
(或a
到f
)这十六个符号,A
表示10
,B
表示11
,以此类推,F
表示15
。 - 应用:在计算机科学中广泛使用,特别是在表示内存地址和颜色编码时。
- 示例:
1F
(十六进制)表示为十进制为31
。
3. 不同进制的表示方法
在 Java 中,可以直接使用不同的语法来表示不同进制的数字:
- 二进制:使用前缀
0b
或0B
表示。例如,0b1010
表示二进制的1010
。 - 八进制:使用前缀
0
表示。例如,012
表示八进制的12
。 - 十进制:不使用前缀,直接书写。例如,
123
表示十进制的123
。 - 十六进制:使用前缀
0x
或0X
表示。例如,0x1A
表示十六进制的1A
。
public class Main {
public static void main(String[] args) {
int binary = 0b1010; // 二进制
int octal = 012; // 八进制
int decimal = 123; // 十进制
int hex = 0x1A; // 十六进制
System.out.println("二进制 0b1010 对应的十进制: " + binary);
System.out.println("八进制 012 对应的十进制: " + octal);
System.out.println("十进制 123: " + decimal);
System.out.println("十六进制 0x1A 对应的十进制: " + hex);
}
}
输出结果:
二进制 0b1010 对应的十进制: 10
八进制 012 对应的十进制: 10
十进制 123: 123
十六进制 0x1A 对应的十进制: 26
4. 进制转换
在实际编程中,经常需要进行不同进制之间的转换。Java 提供了丰富的工具来帮助开发者实现这些转换。
4.1 二进制、八进制、十六进制转换为十进制
在 Java 中,可以使用 Integer.parseInt
方法将二进制、八进制、或十六进制字符串转换为十进制整数。
public class Main {
public static void main(String[] args) {
// 二进制转十进制
int binaryToDecimal = Integer.parseInt("1010", 2);
// 八进制转十进制
int octalToDecimal = Integer.parseInt("12", 8);
// 十六进制转十进制
int hexToDecimal = Integer.parseInt("1A", 16);
System.out.println("二进制 1010 转为十进制: " + binaryToDecimal);
System.out.println("八进制 12 转为十进制: " + octalToDecimal);
System.out.println("十六进制 1A 转为十进制: " + hexToDecimal);
}
}
输出结果:
二进制 1010 转为十进制: 10
八进制 12 转为十进制: 10
十六进制 1A 转为十进制: 26
4.2 十进制转换为二进制、八进制、十六进制
Java 提供了 Integer.toBinaryString
、Integer.toOctalString
和 Integer.toHexString
方法,分别用于将十进制整数转换为二进制、八进制和十六进制字符串。
public class Main {
public static void main(String[] args) {
int number = 26;
// 十进制转二进制
String decimalToBinary = Integer.toBinaryString(number);
// 十进制转八进制
String decimalToOctal = Integer.toOctalString(number);
// 十进制转十六进制
String decimalToHex = Integer.toHexString(number);
System.out.println("十进制 26 转为二进制: " + decimalToBinary);
System.out.println("十进制 26 转为八进制: " + decimalToOctal);
System.out.println("十进制 26 转为十六进制: " + decimalToHex);
}
}
输出结果:
十进制 26 转为二进制: 11010
十进制 26 转为八进制: 32
十进制 26 转为十六进制: 1a
4.3 进制转换对照表格
下表展示了从 0
到 31
的数字在二进制、八进制、十进制和十六进制中的表示:
十进制 (Decimal) | 二进制 (Binary) | 八进制 (Octal) | 十六进制 (Hexadecimal) |
---|---|---|---|
0 | 00000 | 0 | 0 |
1 | 00001 | 1 | 1 |
2 | 00010 | 2 | 2 |
3 | 00011 | 3 | 3 |
4 | 00100 | 4 | 4 |
5 | 00101 | 5 | 5 |
6 | 00110 | 6 | 6 |
7 | 00111 | 7 | 7 |
8 | 01000 | 10 | 8 |
9 | 01001 | 11 | 9 |
10 | 01010 | 12 | A |
11 | 01011 | 13 | B |
12 | 01100 | 14 | C |
13 | 01101 | 15 | D |
14 | 01110 | 16 | E |
15 | 01111 | 17 | F |
16 | 10000 | 20 | 10 |
17 | 10001 | 21 | 11 |
18 | 10010 | 22 | 12 |
19 | 10011 | 23 | 13 |
20 | 10100 | 24 | 14 |
21 | 10101 | 25 | 15 |
22 | 10110 | 26 | 16 |
23 | 10111 | 27 | 17 |
24 | 11000 | 30 | 18 |
25 | 11001 | 31 | 19 |
26 | 11010 | 32 | 1A |
27 | 11011 | 33 | 1B |
28 | 11100 | 34 | 1C |
29 | 11101 | 35 | 1D |
30 | 11110 | 36 | 1E |
31 | 11111 | 37 | 1F |