进制转换
进制是计算机组成原理的入门核心知识点。计算机底层所有数据都以二进制形式存储、运算,日常计算我们习惯使用十进制,而在编程、硬件描述、网络地址等场景中,八进制与十六进制也十分常见。很多人觉得进制转换零散难记,其实只要理清核心规则、选对对应方法,就能高效完成各类转换。本文从基础概念到进阶速算技巧,完整梳理常用进制转换的全部方法。
一、四种常用进制的基础概念
进制的核心规则是「逢基数进一」,不同进制的可用数码、进位规则、表示方式各有区别。
1. 核心参数对比
| 进制类型 | 可用数码 | 基数 r | 进位规则 | 下标表示法 | 后缀表示法 | C 语言前缀写法 |
|---|---|---|---|---|---|---|
| 十进制 | 0,1,2,3,4,5,6,7,8,9 | 10 | 逢十进一 | (数)₁₀ | 数 D | 无前缀,直接书写数字 |
| 二进制 | 0,1 | 2 | 逢二进一 | (数)₂ | 数 B | 0b 开头,如 0b101011 |
| 八进制 | 0,1,2,3,4,5,6,7 | 8 | 逢八进一 | (数)₈ | 数 O | 0 开头,如 0101011 |
| 十六进制 | 0-9、A/B/C/D/E/F | 16 | 逢十六进一 | (数)₁₆ | 数 H | 0x 开头,如 0x101011 |
2. 补充说明
十六进制中,用 A~F 依次对应十进制的 10~15,书写时大小写不影响含义;C 语言中需特别注意前缀区分,避免将八进制误判为十进制。
二、进制转换核心方法
1. 任意进制 → 十进制:按权展开法
这是所有进制转十进制的通用方法,核心是利用「位权」计算最终数值。
- 核心原理:将每一位的数码乘以对应位的权值(基数的 n 次方),所有结果相加,即可得到十进制数。
- 权值规则:整数部分从右往左,权值从基数的 0 次方开始递增;小数部分从左往右,权值从基数的 - 1 次方开始递减。
- 示例:二进制 (101.1)₂转十进制 整数部分:1×2² + 0×2¹ + 1×2⁰ = 4 + 0 + 1 = 5 小数部分:1×2⁻¹ = 0.5 最终结果:(101.1)₂ = (5.5)₁₀
2. 十进制 → 任意进制:除基取余 + 乘基取整
十进制转其他进制时,整数部分与小数部分需分开处理,二者操作规则完全不同。
2.1 整数部分:除基取余法,低位先得
- 操作步骤
- 用十进制整数除以目标进制的基数,记录余数
- 用上一步得到的商继续除以基数,再次记录余数
- 重复操作直到商为 0
- 将所有余数从下往上排列(先得到的是最低位,后得到的是最高位),即为转换结果
- 示例:十进制 123 分别转二、八、十六进制
- 转二进制:反复除以 2,余数依次为 1、1、0、1、1、1、1,倒序得 1111011
- 转八进制:反复除以 8,余数依次为 3、7、1,倒序得 173
- 转十六进制:反复除以 16,余数依次为 11 (对应 B)、7,倒序得 7B
2.2 小数部分:乘基取整法,高位先得
- 操作步骤
- 用十进制小数乘以目标进制的基数,记录结果的整数部分
- 用上一步结果的小数部分继续乘以基数,再次记录整数部分
- 重复操作直到小数部分为 0,或达到所需精度位数
- 将所有整数部分从上往下排列(先得到的是最高位),即为小数部分结果
- 示例:十进制 0.6875 分别转二、八、十六进制
- 转二进制:反复乘 2,整数部分依次为 1、0、1、1,得 0.1011
- 转八进制:反复乘 8,整数部分依次为 5、4,得 0.54
- 转十六进制:乘 16 得整数 11 (对应 B),得 0.B
- 注意事项:并非所有十进制小数都能精确转换为其他进制,可能出现无限循环,此时按需求保留对应精度即可。
3. 二进制 ↔ 八进制 / 十六进制:分组映射法
因为 8=2³、16=2⁴,因此 1 位八进制对应 3 位二进制,1 位十六进制对应 4 位二进制。这类转换无需经过十进制中转,直接分组映射即可,效率更高。
3.1 二进制 → 八进制 / 十六进制
- 分组规则
- 整数部分:从右往左分组,位数不足时在左侧补 0
- 小数部分:从左往右分组,位数不足时在右侧补 0
- 每组分别换算为对应进制的一位数,按顺序拼接即为结果
- 示例:二进制 (1011001100.11011)₂转换
- 转八进制(3 位一组):分组为 001 011 001 100 . 110 110,对应结果 1314.66
- 转十六进制(4 位一组):分组为 0010 1100 1100 . 1101 1000,对应结果 2CC.D8
3.2 八进制 / 十六进制 → 二进制

反向操作即可:每 1 位八进制展开为 3 位二进制,每 1 位十六进制展开为 4 位二进制,整数前导 0、小数末尾 0 可按需省略。
- 示例:八进制 34 → 011 100 → 二进制 11100
- 示例:十六进制 2A → 0010 1010 → 二进制 101010
4. 十进制转二进制进阶:凑值法(重点)
对于 8 位、16 位以内的小整数,凑值法是比除基取余更快的口算方法,在 IP 地址换算、选择题验算等场景中非常实用。
4.1 核心原理
凑值法是按权展开的反向操作:二进制每一位对应一个 2 的幂次,将目标十进制数拆分为若干个 2 的幂次之和,用到的幂次对应位写 1,未用到的写 0,即可得到二进制结果。
生活化类比:就像用固定面额(1、2、4、8、16...)的钞票凑钱,从最大面额开始尝试,够就拿一张(对应位写 1),不够就跳过(对应位写 0),最终拿出的钞票序列就是对应的二进制数。
4.2 常用 2 的幂次表(建议熟记)
| 幂次 | 2⁰ | 2¹ | 2² | 2³ | 2⁴ | 2⁵ | 2⁶ | 2⁷ | 2⁸ |
|---|---|---|---|---|---|---|---|---|---|
| 十进制数值 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 |
其中 2⁷到 2⁰对应 1 字节(8 位)的位权,是最常用的一组数值。
4.3 操作步骤
- 定高位:找到不大于目标数的最大 2 的幂,确定二进制最高位位置。
- 逐位判:从最高位到最低位依次比对,剩余数值≥当前位权则写 1 并减去权值,否则写 0。
- 得结果:判断到最低位后,拼接所有 0、1 序列,即为最终二进制数。
4.4 实战示例
示例 1:十进制 166 转二进制(IPv4 地址常用值)
- 最高位:不大于 166 的最大 2 的幂是 128(2⁷)
- 逐位计算: 128:166≥128 → 1,余 38 64:38<64 → 0 32:38≥32 → 1,余 6 16:6<16 → 0 8:6<8 → 0 4:6≥4 → 1,余 2 2:2≥2 → 1,余 0 1:0<1 → 0
- 结果:10100110
- 其实就是128+32+4+2
示例 2:十进制 23 转二进制(快速口算) 最高位为 16,依次判断得结果 10111。
三、转换总览
1. 转换路径总览
- 任意进制转十进制:统一使用按权展开法
- 十进制转任意进制:整数除基取余、小数乘基取整
- 二进制与八 / 十六进制互转:3 位 / 4 位分组映射法
- 八进制与十六进制互转:推荐以二进制为中转,操作最简便
2. 易错点
- 整数除基取余后,余数要从下往上读(低位先得);小数乘基取整后,整数要从上往下读(高位先得),二者顺序不可混淆。
- 分组转换时,整数部分左补 0,小数部分右补 0,补位方向不能出错。
- 十进制小数转二进制可能存在精度丢失,属于正常现象,按需保留位数即可。
