|
@@ -0,0 +1,192 @@
|
|
|
|
|
+# 进制与进制转换 — 学习笔记
|
|
|
|
|
+
|
|
|
|
|
+**日期**: 2026/07/10
|
|
|
|
|
+**作者**: WanJl
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 一、为什么计算机使用二进制
|
|
|
|
|
+
|
|
|
|
|
+- 计算机由晶体管组成,只有**通电(1)**和**断电(0)**两种状态
|
|
|
|
|
+- 两种状态最稳定可靠,电路设计最简单
|
|
|
|
|
+- 如果使用十进制需要10种电压值,电路极其复杂
|
|
|
|
|
+
|
|
|
|
|
+> 计算机使用二进制不是因为二进制高级,只是因为硬件只识别通电/断电。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 二、四种进制
|
|
|
|
|
+
|
|
|
|
|
+| 进制 | 基数 | 数字符号 | Java 前缀 |
|
|
|
|
|
+|------|------|---------|-----------|
|
|
|
|
|
+| 二进制 | 2 | 0, 1 | `0b` / `0B` |
|
|
|
|
|
+| 八进制 | 8 | 0~7 | `0` |
|
|
|
|
|
+| 十进制 | 10 | 0~9 | 正常写 |
|
|
|
|
|
+| 十六进制 | 16 | 0~9, A~F | `0x` / `0X` |
|
|
|
|
|
+
|
|
|
|
|
+**十六进制 A~F 对应值**:A=10, B=11, C=12, D=13, E=14, F=15
|
|
|
|
|
+
|
|
|
|
|
+### 编码与解码
|
|
|
|
|
+
|
|
|
|
|
+- **编码**:将人能看懂的信息(十进制数、文本、图片等)转换为二进制数据
|
|
|
|
|
+- **解码**:编码的逆过程,将二进制数据转换回人能看懂的信息
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 三、二进制 → 十进制(按权展开法)
|
|
|
|
|
+
|
|
|
|
|
+二进制位权从右往左:`2^0, 2^1, 2^2, 2^3, ...`
|
|
|
|
|
+
|
|
|
|
|
+**示例**:`1101`(二进制)
|
|
|
|
|
+
|
|
|
|
|
+| 位 | 1 | 1 | 0 | 1 |
|
|
|
|
|
+|---|:---:|:---:|:---:|:---:|
|
|
|
|
|
+| 位权 | 2³=8 | 2²=4 | 2¹=2 | 2⁰=1 |
|
|
|
|
|
+| 计算 | 1×8 | 1×4 | 0×2 | 1×1 |
|
|
|
|
|
+
|
|
|
|
|
+结果:`1×8 + 1×4 + 0×2 + 1×1 = 13`(十进制)
|
|
|
|
|
+
|
|
|
|
|
+**示例**:`1010` → `1×8 + 0×4 + 1×2 + 0×1 = 10`
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 四、八进制 → 二进制 与 十六进制 → 二进制
|
|
|
|
|
+
|
|
|
|
|
+### 八进制与二进制(3位一组)
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+二进制: 001 101 111
|
|
|
|
|
+八进制: 1 5 7
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+每 **3** 位二进制对应 **1** 位八进制。
|
|
|
|
|
+
|
|
|
|
|
+### 十六进制与二进制(4位一组)
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+二进制: 1101 1110 1010 0101
|
|
|
|
|
+十六进制: D E A 5
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+每 **4** 位二进制对应 **1** 位十六进制。
|
|
|
|
|
+
|
|
|
|
|
+**十六进制常见用途**:颜色色值、内存地址、MAC 地址、文件权限等。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 五、任意进制 → 十进制(按权展开法)
|
|
|
|
|
+
|
|
|
|
|
+**方法**:每一位数字 × 位权,再求和。
|
|
|
|
|
+
|
|
|
|
|
+### 二进制 → 十进制
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+0b1001 → 1×2³ + 0×2² + 0×2¹ + 1×2⁰ = 8 + 0 + 0 + 1 = 9
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 八进制 → 十进制
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+0257 → 2×8² + 5×8¹ + 7×8⁰ = 128 + 40 + 7 = 175
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 十六进制 → 十进制
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+0x3F → 3×16¹ + 15×16⁰ = 48 + 15 = 63
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 六、Java 代码示例
|
|
|
|
|
+
|
|
|
|
|
+```java
|
|
|
|
|
+int a = 0b0101011; // 二进制,加前缀 0b
|
|
|
|
|
+int b = 01234567; // 八进制,加前缀 0
|
|
|
|
|
+int c = 0x123AFEC9; // 十六进制,加前缀 0x
|
|
|
|
|
+
|
|
|
|
|
+System.out.println(a); // Java 自动转换为十进制输出
|
|
|
|
|
+System.out.println(b);
|
|
|
|
|
+System.out.println(c);
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 七、知识总结
|
|
|
|
|
+
|
|
|
|
|
+| 知识点 | 要点 |
|
|
|
|
|
+|-------|------|
|
|
|
|
|
+| 二进制 | `0b` 前缀,基数 2,符号 0/1 |
|
|
|
|
|
+| 八进制 | `0` 前缀,基数 8,3位二进制对应1位八进制 |
|
|
|
|
|
+| 十六进制 | `0x` 前缀,基数 16,4位二进制对应1位十六进制 |
|
|
|
|
|
+| 按权展开法 | 每位数字 × 位权,再求和 → 得到十进制 |
|
|
|
|
|
+| 编码/解码 | 人→机器(编码),机器→人(解码) |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 八、十进制 → 任意进制(除基取余法)
|
|
|
|
|
+
|
|
|
|
|
+**方法**:不断除以目标进制,取余数,**从下往上**排列余数。
|
|
|
|
|
+
|
|
|
|
|
+### 十进制 → 二进制(除2取余)
|
|
|
|
|
+
|
|
|
|
|
+将 25 转换为二进制:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+25 ÷ 2 = 12 余 1
|
|
|
|
|
+12 ÷ 2 = 6 余 0
|
|
|
|
|
+6 ÷ 2 = 3 余 0
|
|
|
|
|
+3 ÷ 2 = 1 余 1
|
|
|
|
|
+1 ÷ 2 = 0 余 1
|
|
|
|
|
+```
|
|
|
|
|
+从下往上读:**11001**
|
|
|
|
|
+
|
|
|
|
|
+> 结果:十进制数 25 = 二进制数 11001
|
|
|
|
|
+
|
|
|
|
|
+### 十进制 → 八进制(除8取余)
|
|
|
|
|
+
|
|
|
|
|
+将 175 转换为八进制:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+175 ÷ 8 = 21 余 7
|
|
|
|
|
+21 ÷ 8 = 2 余 5
|
|
|
|
|
+2 ÷ 8 = 0 余 2
|
|
|
|
|
+```
|
|
|
|
|
+从下往上读:**257**
|
|
|
|
|
+
|
|
|
|
|
+> 结果:十进制数 175 = 八进制数 257
|
|
|
|
|
+
|
|
|
|
|
+### 十进制 → 十六进制(除16取余)
|
|
|
|
|
+
|
|
|
|
|
+将 255 转换为十六进制:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+255 ÷ 16 = 15 余 15 → F
|
|
|
|
|
+15 ÷ 16 = 0 余 15 → F
|
|
|
|
|
+```
|
|
|
|
|
+从下往上读:**FF**
|
|
|
|
|
+
|
|
|
|
|
+> 结果:十进制数 255 = 十六进制数 FF
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 九、进制转换总结
|
|
|
|
|
+
|
|
|
|
|
+| 转换方向 | 方法 | 说明 |
|
|
|
|
|
+|---------|------|------|
|
|
|
|
|
+| 任意进制 → 十进制 | 按权展开法 | 每位数字 × 位权,再求和 |
|
|
|
|
|
+| 十进制 → 任意进制 | 除基取余法 | 不断除以目标进制,取余数从下往上排列 |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 练习题
|
|
|
|
|
+
|
|
|
|
|
+将十进制数 357 分别转换为二进制、八进制、十六进制:
|
|
|
|
|
+- 二进制:
|
|
|
|
|
+- 八进制:
|
|
|
|
|
+- 十六进制:
|
|
|
|
|
+
|
|
|
|
|
+将十进制数 1234 分别转换为二进制、八进制、十六进制:
|
|
|
|
|
+- 二进制:
|
|
|
|
|
+- 八进制:
|
|
|
|
|
+- 十六进制:
|