目录

前言

一、先搞懂核心:什么是进制?

1. 核心概念

2. 为什么计算机要用这么多进制?

二、第一大类:任意进制 → 十进制(万能方法:位权展开求和法)

通用公式

1. 二进制 → 十进制

2. 八进制 → 十进制

3. 十六进制 → 十进制

三、第二大类:十进制 → 任意进制

3.1 十进制整数 → 任意进制(万能方法:除基取余,逆序排列)

核心规则

1. 十进制整数 → 二进制

2. 十进制整数 → 八进制

3. 十进制整数 → 十六进制

3.2 十进制小数 → 任意进制(万能方法:乘基取整,顺序排列)

核心规则

1. 十进制小数 → 二进制

2. 十进制小数 → 八进制

3.3 带整数和小数的十进制 → 任意进制

四、第三大类:二进制 ↔ 八进制 ↔ 十六进制(快捷转换法)

4.1 二进制 ↔ 八进制

规则

例子 1:二进制 → 八进制

例子 2:八进制 → 二进制

4.2 二进制 ↔ 十六进制

规则

例子 1:二进制 → 十六进制

例子 2:十六进制 → 二进制

4.3 八进制 ↔ 十六进制

五、例题 + 更形象更直接的解释!

R进制转十进制

二进制带小数转十进制

八进制带小数转十进制

十六进制带小数转十进制

十进制转R进制

十进制转八、十六进制

十进制小数转二、八进制

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

八、十六进制转二进制

二进制转八、十六进制

六、避坑


前言

很多刚接触计算机、编程的小伙伴,都会被进制转换搞得头大:二进制、八进制、十六进制来回转,要么记混方法,要么算错数,甚至搞不懂“好好的十进制不用,为啥要搞这么多进制? ”

一、先搞懂核心:什么是进制?

不管是十进制、二进制还是十六进制,本质都是 **「按位计数的规则」,核心只有两个概念:基数位权 **。

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 十进制整数 → 任意进制(万能方法:除基取余,逆序排列)

核心规则
  1. 用十进制数 除以 目标进制的基数 N,得到商和余数
  2. 用商继续除以 N,重复步骤 1,直到商为 0
  3. 把所有余数 ** 从后往前(逆序)** 排列,就是结果
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 十进制小数 → 任意进制(万能方法:乘基取整,顺序排列)

核心规则
  1. 用十进制小数 乘以 目标进制的基数 N,得到结果,取出整数部分
  2. 用剩下的小数部分继续乘以 N,重复步骤 1,直到小数部分为 0,或达到指定精度
  3. 把所有取出的整数部分 ** 从前往后(顺序)** 排列,就是小数部分的结果

⚠️ 注意:很多十进制小数无法用二进制 / 八进制精确表示(比如 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 转二进制

  • 整数部分53110101B
  • 小数部分0.68750.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 转八进制

  1. 分组补 0:
    • 整数部分(右→左):110 101(刚好 2 组,不用补 0)
    • 小数部分(左→右):101 100(最后 1 位不足 3 位,右侧补 2 个 0)
  2. 每组转八进制:
    • 110=6101=5101=5100=4
    • 结果:110101.1011B = 65.54O
例子 2:八进制 → 二进制

把八进制 127.56O 转二进制

  1. 每 1 位转 3 位二进制:
    • 1=0012=0107=1115=1016=110
  2. 拼接起来:001010111.101110,去掉前导多余的 0
  3.  结果:127.56O = 1010111.10111B

4.2 二进制 ↔ 十六进制

规则
  • 二进制 → 十六进制:整数部分从右往左,小数部分从左往右,每 4 位分一组,不足 4 位补 0,每组对应 1 位十六进制数。
  • 十六进制 → 二进制:把每 1 位十六进制数,转换成 4 位二进制数,不足 4 位补 0,按顺序拼接即可。
例子 1:二进制 → 十六进制

把二进制 110101.1011B 转十六进制

  1. 分组补 0:
    • 整数部分(右→左):0011 0101(左侧补 2 个 0,凑够 4 位一组)
    • 小数部分(左→右):1011(刚好 4 位,不用补 0)
  2. 每组转十六进制:
    • 0011=30101=51011=B
    • 结果:110101.1011B = 35.BH
例子 2:十六进制 → 二进制

把十六进制 2A.8H 转二进制

  1. 每 1 位转 4 位二进制:
    • 2=0010A=10108=1000
  2. 拼接起来:00101010.1000,去掉前导多余的 0
  3. 结果:2A.8H = 101010.1B

4.3 八进制 ↔ 十六进制

最省事的方法:先转二进制,再转目标进制

例子:把八进制 65.54O 转十六进制

  1. 八进制 → 二进制:65.54O = 110101.1011B
  2. 二进制 → 十六进制:110101.1011B = 35.BH
  3. 结果:65.54O = 35.BH

五、例题 + 更形象更直接的解释!

R进制转十进制

二进制带小数转十进制

八进制带小数转十进制

十六进制带小数转十进制

十进制转R进制

十进制转八、十六进制

十进制小数转二、八进制

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

八、十六进制转二进制

二进制转八、十六进制

六、避坑

  • 除基取余,顺序搞反:整数转换的余数要逆序排列
  • 乘基取整,顺序搞反:小数转换的整数要顺序排列,和整数的规则刚好相反
  • 分组补 0,方向错了:二进制分组时,整数部分是从右往左补 0,小数部分是从左往右补 0
  • 十六进制字母对应错:A 对应 10,B 对应 11...F 对应 15,别把 A 当成 11,F 当成 16。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐