【计算机系统原理】进制转换全攻略 一篇搞定所有进制互转
目录
二、第一大类:任意进制 → 十进制(万能方法:位权展开求和法)
3.1 十进制整数 → 任意进制(万能方法:除基取余,逆序排列)
3.2 十进制小数 → 任意进制(万能方法:乘基取整,顺序排列)
四、第三大类:二进制 ↔ 八进制 ↔ 十六进制(快捷转换法)
前言
很多刚接触计算机、编程的小伙伴,都会被进制转换搞得头大:二进制、八进制、十六进制来回转,要么记混方法,要么算错数,甚至搞不懂“好好的十进制不用,为啥要搞这么多进制? ”
一、先搞懂核心:什么是进制?
不管是十进制、二进制还是十六进制,本质都是 **「按位计数的规则」,核心只有两个概念:基数和位权 **。
1. 核心概念
- 基数:一个进制里能用的数字个数,N 进制的基数就是 N。
- 十进制:基数 10,能用 0-9 共 10 个数字
- 二进制:基数 2,只能用 0、1 共 2 个数字
- 八进制:基数 8,能用 0-7 共 8 个数字
- 十六进制:基数 16,能用 0-9、A-F(a-f)共 16 个数字,A-F 对应 10-15
- 位权:每一位数字代表的权重,N 进制的第
i位(从右往左,从 0 开始数)的位权是N^i。
举个最熟悉的十进制例子:123.45
- 整数部分从右往左:个位是
10^0、十位是10^1、百位是10^2 - 小数部分从左往右:十分位是
10^-1、百分位是10^-2 - 展开就是:
1×10² + 2×10¹ + 3×10⁰ + 4×10⁻¹ + 5×10⁻²
所有进制转换的底层逻辑,都来自这个「位权展开」,记住这个,后面所有方法都能一通百通。
2. 为什么计算机要用这么多进制?
- 二进制:计算机硬件只有高低电平两个状态,完美对应 0 和 1,是计算机底层唯一能识别的进制。
- 八进制 / 十六进制:二进制写起来太长了(比如 1 个字节要写 8 位二进制),而 8=2³、16=2⁴,1 位八进制 / 十六进制能对应 3 位 / 4 位二进制,是二进制的「简写形式」,方便我们阅读、书写和调试。
二、第一大类:任意进制 → 十进制(万能方法:位权展开求和法)
不管是二进制、八进制、十六进制,转十进制的方法完全一样,不用分开记,就用「位权展开,逐项求和」。
通用公式
对于 N 进制数aₙaₙ₋₁...a₁a₀.a₋₁a₋₂...a₋ₘ,转十进制的公式:
十进制值 = aₙ×Nⁿ + aₙ₋₁×Nⁿ⁻¹ + ... + a₁×N¹ + a₀×N⁰ + a₋₁×N⁻¹ + ... + a₋ₘ×N⁻ᵐ
1. 二进制 → 十进制
例子:把二进制数 1011.01B 转十进制(B 是二进制标识,可省略)
- 基数 N=2,按位权展开:
1×2³ + 0×2² + 1×2¹ + 1×2⁰ + 0×2⁻¹ + 1×2⁻²
= 8 + 0 + 2 + 1 + 0 + 0.25
= 11.25
结果:1011.01B = 11.25D(D 是十进制标识,可省略)
2. 八进制 → 十进制
例子:把八进制数 127.2O 转十进制(O 是八进制标识,避免和 0 混淆)
- 基数 N=8,按位权展开:
1×8² + 2×8¹ + 7×8⁰ + 2×8⁻¹
= 64 + 16 + 7 + 0.25
= 87.25
结果:127.2O = 87.25
3. 十六进制 → 十进制
例子:把十六进制数 2A.8H 转十进制(H 是十六进制标识,A 对应 10)
- 基数 N=16,按位权展开:
2×16¹ + 10×16⁰ + 8×16⁻¹
= 32 + 10 + 0.5
= 42.5
结果:2A.8H = 42.5
三、第二大类:十进制 → 任意进制
十进制转其他进制,整数部分和小数部分的方法完全不同,必须分开计算,最后再合并。
3.1 十进制整数 → 任意进制(万能方法:除基取余,逆序排列)
核心规则
- 用十进制数 除以 目标进制的基数 N,得到商和余数
- 用商继续除以 N,重复步骤 1,直到商为 0
- 把所有余数 ** 从后往前(逆序)** 排列,就是结果
1. 十进制整数 → 二进制
例子:把十进制整数 53 转二进制
- 基数 N=2,除 2 取余:
53 ÷ 2 = 26 余 1
26 ÷ 2 = 13 余 0
13 ÷ 2 = 6 余 1
6 ÷ 2 = 3 余 0
3 ÷ 2 = 1 余 1
1 ÷ 2 = 0 余 1
- 逆序排列余数:
110101 - 结果:
53 = 110101B
2. 十进制整数 → 八进制
例子:把十进制整数 53 转八进制
- 基数 N=8,除 8 取余:
53 ÷ 8 = 6 余 5
6 ÷ 8 = 0 余 6
- 逆序排列余数:
65 - 结果:
53 = 65O
3. 十进制整数 → 十六进制
例子:把十进制整数 314 转十六进制
- 基数 N=16,除 16 取余:
314 ÷ 16 = 19 余 10(对应A)
19 ÷ 16 = 1 余 3
1 ÷ 16 = 0 余 1
- 逆序排列余数:
13A - 结果:
314 = 13AH
3.2 十进制小数 → 任意进制(万能方法:乘基取整,顺序排列)
核心规则
- 用十进制小数 乘以 目标进制的基数 N,得到结果,取出整数部分
- 用剩下的小数部分继续乘以 N,重复步骤 1,直到小数部分为 0,或达到指定精度
- 把所有取出的整数部分 ** 从前往后(顺序)** 排列,就是小数部分的结果
⚠️ 注意:很多十进制小数无法用二进制 / 八进制精确表示(比如 0.2),所以一般会保留指定位数的精度。
1. 十进制小数 → 二进制
例子:把十进制小数 0.6875 转二进制
- 基数 N=2,乘 2 取整:
0.6875 × 2 = 1.375 取整 1
0.375 × 2 = 0.75 取整 0
0.75 × 2 = 1.5 取整 1
0.5 × 2 = 1.0 取整 1
- 小数部分为 0,停止计算,
- 顺序排列整数:
0.1011 - 结果:
0.6875 = 0.1011B
再举一个非精确的例子:把0.2转二进制,保留 4 位精度
0.2 × 2 = 0.4 取整 0
0.4 × 2 = 0.8 取整 0
0.8 × 2 = 1.6 取整 1
0.6 × 2 = 1.2 取整 1
结果:0.2 ≈ 0.0011B(保留 4 位小数)
2. 十进制小数 → 八进制
例子:把十进制小数 0.71875 转八进制
- 基数 N=8,乘 8 取整:
0.71875 × 8 = 5.75 取整 5
0.75 × 8 = 6.0 取整 6
- 顺序排列整数:
0.56 - 结果:
0.71875 = 0.56O
3.3 带整数和小数的十进制 → 任意进制
方法很简单:整数部分和小数部分分开转换,最后合并即可。
例子:把十进制 53.6875 转二进制
- 整数部分
53→110101B - 小数部分
0.6875→0.1011B - 合并结果:
53.6875 = 110101.1011B
四、第三大类:二进制 ↔ 八进制 ↔ 十六进制(快捷转换法)
因为 2、8、16 都是 2 的幂次,所以它们之间的转换完全不用先转十进制,有很好的分组法,记一句口诀:3 位二进制对应 1 位八进制,4 位二进制对应 1 位十六进制(简称 3 八 4 十六)。
4.1 二进制 ↔ 八进制
规则
- 二进制 → 八进制:整数部分从右往左,小数部分从左往右,每 3 位分一组,不足 3 位补 0,每组对应 1 位八进制数。
- 八进制 → 二进制:把每 1 位八进制数,转换成 3 位二进制数,不足 3 位补 0,按顺序拼接即可。
例子 1:二进制 → 八进制
把二进制 110101.1011B 转八进制
- 分组补 0:
- 整数部分(右→左):
110 101(刚好 2 组,不用补 0) - 小数部分(左→右):
101 100(最后 1 位不足 3 位,右侧补 2 个 0)
- 整数部分(右→左):
- 每组转八进制:
110=6、101=5、101=5、100=4- 结果:
110101.1011B = 65.54O
例子 2:八进制 → 二进制
把八进制 127.56O 转二进制
- 每 1 位转 3 位二进制:
1=001、2=010、7=111、5=101、6=110
- 拼接起来:
001010111.101110,去掉前导多余的 0 - 结果:
127.56O = 1010111.10111B
4.2 二进制 ↔ 十六进制
规则
- 二进制 → 十六进制:整数部分从右往左,小数部分从左往右,每 4 位分一组,不足 4 位补 0,每组对应 1 位十六进制数。
- 十六进制 → 二进制:把每 1 位十六进制数,转换成 4 位二进制数,不足 4 位补 0,按顺序拼接即可。
例子 1:二进制 → 十六进制
把二进制 110101.1011B 转十六进制
- 分组补 0:
- 整数部分(右→左):
0011 0101(左侧补 2 个 0,凑够 4 位一组) - 小数部分(左→右):
1011(刚好 4 位,不用补 0)
- 整数部分(右→左):
- 每组转十六进制:
0011=3、0101=5、1011=B- 结果:
110101.1011B = 35.BH
例子 2:十六进制 → 二进制
把十六进制 2A.8H 转二进制
- 每 1 位转 4 位二进制:
2=0010、A=1010、8=1000
- 拼接起来:
00101010.1000,去掉前导多余的 0 - 结果:
2A.8H = 101010.1B
4.3 八进制 ↔ 十六进制
最省事的方法:先转二进制,再转目标进制
例子:把八进制 65.54O 转十六进制
- 八进制 → 二进制:
65.54O = 110101.1011B - 二进制 → 十六进制:
110101.1011B = 35.BH - 结果:
65.54O = 35.BH
五、例题 + 更形象更直接的解释!
R进制转十进制
二进制带小数转十进制

八进制带小数转十进制

十六进制带小数转十进制

十进制转R进制

十进制转八、十六进制

十进制小数转二、八进制

十进制小数转二进制(取近似值情况)

八、十六进制转二进制

二进制转八、十六进制

六、避坑
- 除基取余,顺序搞反:整数转换的余数要逆序排列
- 乘基取整,顺序搞反:小数转换的整数要顺序排列,和整数的规则刚好相反
- 分组补 0,方向错了:二进制分组时,整数部分是从右往左补 0,小数部分是从左往右补 0,
- 十六进制字母对应错:A 对应 10,B 对应 11...F 对应 15,别把 A 当成 11,F 当成 16。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)