首页/计算机组成原理/02-data-representation/进制转换和BCD码 🔗 在 Obsidian 中打开
计算机组成原理 · 02-data-representation

进制转换和BCD码

重要度 ⭐⭐⭐⭐BCD码8421码余3码2421码进制转换
速查
进制转换:R→10 按权展开;10→R 整数除基取余(倒序)、小数乘基取整(正序);二↔八 3 位一组、二↔十六 4 位一组。BCD 码:8421 码最常用(加法结果 >9 需加 6 修正);余3码 = 8421 + 0011(自补);2421 码有权、编码不唯一。

概述

进制转换是计算机中最基础的数据表示方法。计算机内部使用二进制,但人类习惯十进制,因此需要掌握各种进制之间的转换方法。BCD 码是用二进制编码表示十进制数的方式。

R进制转十进制(按权展开法)

将每一位数字乘以其对应的权值(R 的幂次),然后求和。

二进制转十进制

$$1011.1_2 = 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 + 1 \times 2^{-1} = 8 + 0 + 2 + 1 + 0.5 = 11.5_{10}$$

八进制转十进制

$$725.3_8 = 7 \times 8^2 + 2 \times 8^1 + 5 \times 8^0 + 3 \times 8^{-1} = 448 + 16 + 5 + 0.375 = 469.375_{10}$$

十六进制转十进制

$$2AF.4_{16} = 2 \times 16^2 + A \times 16^1 + F \times 16^0 + 4 \times 16^{-1} = 512 + 160 + 15 + 0.25 = 687.25_{10}$$

十进制转R进制

整数部分(除基取余法)

  • 除以 R,取余数,直到商为 0;余数倒序排列即为结果。

$157_{10}$ 转二进制(余数自下而上倒序读取):

1. 157 ÷ 2 = 78 … 1
2. 78  ÷ 2 = 39 … 0
3. 39  ÷ 2 = 19 … 1
4. 19  ÷ 2 = 9  … 1
5. 9   ÷ 2 = 4  … 1
6. 4   ÷ 2 = 2  … 0
7. 2   ÷ 2 = 1  … 0
8. 1   ÷ 2 = 0  … 1
结果:10011101₂

小数部分(乘基取整法)

  • 乘以 R,取整数部分,直到小数部分为 0 或达到精度要求;整数顺序排列即为结果。

$0.6875_{10}$ 转二进制(整数部分自上而下顺序读取):

1. 0.6875 × 2 = 1.375 → 1
2. 0.375  × 2 = 0.75  → 0
3. 0.75   × 2 = 1.5   → 1
4. 0.5    × 2 = 1.0   → 1
结果:0.1011₂
注意有些小数无法精确表示(如 $0.1_{10}$),会产生无限循环小数。

二进制与八进制、十六进制互转

二进制 ↔ 八进制(3 位一组)

10 011 101.101₂
 2   3   5 . 5   → 235.5₈

二进制 ↔ 十六进制(4 位一组)

1001 1101.1010₂
  9    D .  A   → 9D.A₁₆

技巧:这是计算机中常用的快速转换方法。

BCD码概述

BCD(Binary Coded Decimal)码用 4 位二进制数编码 1 位十进制数(0-9)。

  • 有权码:每位有固定权值(8421 码、2421 码、5211 码)。
  • 无权码:每位无固定权值(余3码、余3循环码)。

8421码

编码表

十进制8421码十进制8421码
0000050101
1000160110
2001070111
3001181000
4010091001

运算规则

  • 两个 BCD 码相加,若结果 $\leq 9$,无需修正。
  • 若结果 $> 9$ 或产生进位,需加 6(0110)修正
例:3 + 5 = 8         例:8 + 7 = 15
  0011                  1000
+ 0101                + 0111
------                ------
  1000  → 8 无需修正     1111  → 15 > 9,需修正
                     + 0110  → 加6修正
                     ------
                     1 0101  → 进位1 + 0101 = 15 ✓

8421码加法修正步骤

  1. 两数相加。
  2. 若结果 $\leq 9$ 且无进位 → 直接得结果。
  3. 若结果 $> 9$ 或有进位 → 加 0110 修正,产生进位。

余3码

特点

  • 在 8421 码基础上加 3 得到。
  • 无权码
  • 自补码:0 和 9、1 和 8、2 和 7…的编码互为取反。

编码表

十进制8421码余3码十进制8421码余3码
000000011501011000
100010100601101001
200100101701111010
300110110810001011
401000111910011100

余3码加法

两个余3码相加,结果进位后需减 3 修正(加 1101,即 -3 的补码)。

2421码

特点

  • 有权码,权值从左到右为 2、4、2、1。
  • 也是自补码
  • 编码不唯一(如 5 可以是 1011 或 0101,通常选择前者)。

编码表

十进制2421码十进制2421码
0000051011
1000161100
2001071101
3001181110
4010091111

各BCD码对比

BCD码类型有权/无权自补码特点
8421码有权最常用,加法需修正
余3码无权加减法方便
2421码有权编码不唯一
余3循环码无权相邻仅差 1 位
余3循环码(格雷码变种)0 和 9、相邻编码只有一位不同,用于减少硬件错误。

易错点

  1. 8421 码加法后大于 9 要加 6 修正,不是加 10。
  2. 余3码和 8421 码的关系:余3码 = 8421 码 + 3。
  3. BCD 码不是二进制数,是用二进制编码的十进制数。
  4. 小数转换时可能产生无限循环,需注意精度。
  5. 2421 码中 5 的编码不是 0101 而是 1011(自补码约束)。

记忆卡片

十进制整数转二进制的方法?
除基取余法:除以 2 取余,直到商为 0,余数倒序排列(如 157₁₀ = 10011101₂)。
十进制小数转二进制的方法?
乘基取整法:乘以 2 取整数,整数正序排列(如 0.6875₁₀ = 0.1011₂)。
8421 码加法何时修正?
结果 ≤ 9 且无进位不修正;结果 > 9 或有进位,加 0110(6)修正。
余3码/2421码共同点?
都是自补码(0 与 9、1 与 8…编码互为取反);余3码 = 8421 + 3,2421 编码不唯一。

交互动画 · BCD 编码对照与自补验证

同一十进制数字在三种 BCD 编码下的 4 位编码 8421 码(有权) 余3码(无权,自补) 2421 码(有权,自补) 8421 2421 0000 0000 0000
点击数字,查看 8421 / 余3 / 2421 三种编码
点击按钮开始

相关知识点

fixed-point-representation arithmetic-logic-unit-alu

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。