进位计数制及其相互转换
这一节看上去只是小学算术的复习,但它在整门课里的地位并不低:后面每一次”算容量、算位数、算地址范围”,用的都是这里的两个结论——位权展开,以及
更重要的是,这一节埋着一个后面才会爆发的事实:十进制里写得出来的小数,二进制里往往写不出来。 这不是精度不够,而是根本无法有限表示。2.3.3 里 0.1 + 0.2 != 0.3 的全部原因,就在这一节。
机制
位权展开:一切转换的唯一原理
一个
- 往十进制转:直接代入求和。
- 从十进制转:反解各个
,整数部分靠除法取余、小数部分靠乘法取整。
把这一点想明白,就不必分别记四五条规则。
进制 → 十进制:按权展开
逐位乘以位权再相加即可。
十进制 → 进制:整数除基取余,小数乘基取整
整数部分和小数部分必须分开做,规则还恰好相反,这是最容易记混的地方。原理都在位权展开式里:
整数部分,设
小数部分,设
| 操作 | 取什么 | 读的方向 | 何时停 | |
|---|---|---|---|---|
| 整数部分 | 除以基 | 取余数 | 逆序(从下往上) | 商为 0 |
| 小数部分 | 乘以基 | 取整数 | 顺序(从上往下) | 小数部分为 0,或已达要求位数 |
“或已达要求位数”这半句是本节的重点,下面单独讲。
为什么十进制小数常常转不完
整数部分的转换一定会终止(商单调减小,必然到 0)。小数部分的转换则不保证终止。
以
小数部分回到了 0011 无限循环:
判据很干净:一个十进制小数能被二进制有限位精确表示,当且仅当它可以写成
这条判据的一般形式:
关联对照:本节是浮点误差的源头
二、八、十六进制之间:以小数点为中心分组
关键是分组的起点:必须以小数点为中心向两侧分,整数部分向左、小数部分向右,不足的一侧补 0。
八进制与十六进制之间没有直接的分组关系(
flowchart LR D["十进制"]:::dec B["二进制"]:::bin O["八进制"]:::hex H["十六进制"]:::hex D <-->|"除基取余 / 按权展开<br/><b>要做算术</b>"| B B <-->|"<b>3 位一组</b><br/>纯分组"| O B <-->|"<b>4 位一组</b><br/>纯分组"| H O -.->|"<b>无直接规则</b><br/>必须过二进制"| H classDef dec fill:#fef3c7,stroke:#d97706,color:#78350f classDef bin fill:#dbeafe,stroke:#2563eb,color:#1e3a5f classDef hex fill:#dcfce7,stroke:#16a34a,color:#14532d linkStyle 3 stroke:#dc2626,stroke-dasharray:5 5
十六进制在计组里之所以无处不在,正是因为它和二进制之间的转换零成本:0xFF 一眼就是 8 个 1,0x8000_0000 一眼就是”最高位 1、其余全 0”。做机器数题时先把数写成十六进制,几乎总能省事。
位数与状态数
这个式子在后面被反复使用:
| 用处 | 形式 | 出现在 |
|---|---|---|
| 存储单元数 → 地址线条数 | 2.1.3、第 3 章存储器 | |
| 主存块数 → 主存块号位数 | 同上 | 第 3 章 Cache 映射 |
| 指令条数 → 操作码位数 | 同上 | 第 4 章指令格式 |
| 微命令数 → 微指令字段位数 | 同上 | 第 5 章微程序控制器 |
必须背下来的一组值:
边界
容量的 K/M/G 与速率的 K/M/G 不是一回事
同一个”M”,在两种语境下差着 4.9%:
| 语境 | 进制 | 例 |
|---|---|---|
| 容量(存储器、Cache、地址空间) | 1MB | |
| 速率 / 频率 / 带宽 | 1MHz |
判据是”这个量是不是由地址位数决定的”:由二进制位数决定的量(容量、块数、页数)按
这条区别在第 3 章算存储器带宽和第 6 章算总线数据传输率时会直接影响答案。磁盘厂商标称的”1TB”用的是
进制 ≠ 编码
“用几进制书写”和”用什么规则解释这串位”是两个正交的问题。
所以做题时的第一动作永远是先确认编码规则,再谈数值。这一点在 2.1.2 展开。
BCD 码与校验码不在 2026 教材的三级节里
王道 2026 版第 2 章目录只有
旧版笔记里把 BCD 写成”2.1.2”是按旧目录推测的,节号错误,已归档。若在旧题里遇到 8421 码,只需记住它是**“每个十进制位单独用 4 位二进制编码”**,与整体转成二进制完全不同:0001 0101,二进制是 1111。
对照速查
| 方向 | 做法 |
|---|---|
| 按权展开求和 | |
| 除基取余,逆序 | |
| 乘基取整,顺序 | |
| 3 位一组,以小数点为中心 | |
| 4 位一组,以小数点为中心 | |
| 必须过二进制 |
| 常用值 | |||
|---|---|---|---|
考点
- 小数部分转换用”乘基取整、顺序读”,与整数部分的”除基取余、逆序读”方向相反
- 小数转换可能不终止;判据是该小数能否写成
分组必须以小数点为中心,两侧分别补 0- 八进制与十六进制之间没有直接分组规则
位区分 个状态;求位数用- 容量的 K/M/G 是
,速率的是 - 进制与编码正交:同一位串在不同编码下是不同的数
链接
- 🏠 返回总览:计算机组成原理第 2 章:数据的表示和运算总览
- ➡️ 下一节:2.1.2 定点数的编码表示
- 📖 名词库:第 2 章名词库