余3码(Excess-3 Code)加法进位原理详解
2026/6/10 7:37:51 网站建设 项目流程

一、余3码的定义

余3码是一种 BCD(二-十进制编码)的变种,它的编码规则是:

余3码=对应十进制数+3(用4位二进制表示)余3码=对应十进制数+3(用4位二进制表示)

十进制BCD(8421)余3码
000000011
100010100
200100101
300110110
401000111
501011000
601101001
701111010
810001011
910011100

二、核心问题:为什么"两数之和为10时正好等于二进制16"?

1. 数学推导

设两个十进制数 A、B,它们的余3码分别为:

Axs3=A+3Axs3​=A+3 Bxs3=B+3Bxs3​=B+3

将两个余3码直接做4位二进制加法

Axs3+Bxs3=(A+3)+(B+3)=(A+B)+6Axs3​+Bxs3​=(A+3)+(B+3)=(A+B)+6

2. 关键临界点:A + B = 10

当两个十进制数相加正好等于 10(即产生十进制进位的临界点)时:

Axs3+Bxs3=10+6=16=(10000)2Axs3​+Bxs3​=10+6=16=(10000)2​

而 4 位二进制能表示的最大值是 15(即 1111),16 = 10000,正好从第 4 位(最高位)自动溢出一个进位 1


三、为什么这是一个"巧妙"的特性?

1. 对比 8421 BCD 码的缺陷

如果用普通 8421 BCD 码做加法:

:5 + 5 = 10

  • 0101 + 0101 =1010(二进制是 10,但 BCD 中 1010 是非法码!)
  • 不会自动产生进位,必须通过额外电路检测"结果 > 9",再+6 修正

:8 + 5 = 13

  • 1000 + 0101 =1101(13,但 BCD 非法码)
  • 同样需要 +6 修正才能得到 0001 0011

8421 BCD 的问题:4 位二进制满量程 16,而 BCD 只用到 10,多出 6 个无效编码,所以需要"加 6 修正"。


2. 余3码的优势:进位自动产生

由于每个数都"预加了 3",两数相加就预加了 6,正好补足了二进制满 16 与十进制满 10 之间的差额!

A + B 值余3码相加结果是否产生进位含义
< 10< 16无进位十进制无进位
= 10= 16有进位(自动)十进制刚好进位
> 10> 16有进位(自动)十进制有进位

结论:余3码加法时,二进制最高位的进位信号 = 十进制进位信号,无需额外判断电路!


四、举例说明

例 1:4 + 3 = 7(无进位)

二进制
4 的余3码0111
3 的余3码0110
相加1101 = 13
  • 无进位输出(最高位无溢出)
  • 结果 1101 = 13,需要 −3 修正→ 1101 − 0011 =1010

不对,应该减 3:1101 − 0011 = 1010,但 1010 不是余3码 7(余3码 7 = 1010)✓ 正确!

规则:无进位时,结果−3(减 0011)才是正确余3码结果。


例 2:5 + 5 = 10(恰好进位)

二进制
5 的余3码1000
5 的余3码1000
相加1 0000
  • 最高位自动产生进位 1✓(十进制确实进位)
  • 低 4 位 = 0000,需要+3 修正→ 0000 + 0011 =0011= 余3码 0
  • 结果:进位 1,本位 0 →10

规则:有进位时,结果+3(加 0011)才是正确余3码结果。


例 3:8 + 5 = 13(有进位)

二进制
8 的余3码1011
5 的余3码1000
相加1 0011
  • 最高位自动产生进位 1
  • 低 4 位 = 0011,+3 修正 → 0110 = 余3码 3
  • 结果:进位 1,本位 3 →13

五、修正规则总结

情况进位 Cout修正方法
A+B < 100低 4 位 −3(即 +1101 补码加 3)
A+B ≥ 101(自动产生)低 4 位 +3

六、余3码的其他优点

  1. 进位自动产生(本题核心):硬件电路简单,不需要额外的"大于 9"比较器
  2. 自补码特性(最重要的优点之一)
    • 9 的余3码 = 1100,0 的余3码 = 0011,互为反码
    • 求 9 的补码只需按位取反,便于实现减法运算(变加为减)
  3. 无全零码:0 的编码是 0011,没有"全 0"编码,便于故障检测(区分"无信号"与"零值")

七、本质原理总结(回答核心问题)

为什么 A+B = 10 时正好产生进位?

角度解释
数学本质A+3 与 B+3 相加 = A+B+6,而二进制 4 位满量程 16 = 10 + 6,预加的 6 正好填补两者差额
进位含义当 A+B ≥ 10(十进制进位)时,A+B+6 ≥ 16(二进制进位),两种进位条件等价
硬件意义直接用普通 4 位二进制加法器的 Cout 作为十进制进位信号,省去判别电路
设计哲学把"修正"提前嵌入到编码中(每个数 +3),让加法器自然产生正确的进位

八、与 BCD 码进位电路的对比

8421 BCD 加法器需要:

Run

进位 = Cout(原始) OR (S3·S2) OR (S3·S1)

(即结果 ≥ 10 时强制产生进位,还要 +6 修正)

余3码加法器只需要:

Apply

进位 = Cout(原始) ← 直接用! 低4位修正 = +3 或 −3 ← 由进位信号决定

电路简化:减少了一个"大于 9 检测"电路,这就是余3码在早期计算机(如 IBM 1401、IBM 1620)中被广泛应用的原因。


总结

余3码的核心思想是:通过给每个数预加 3,把"BCD 十进制满 10 进位"和"二进制 4 位满 16 进位"两个不同的进位条件统一起来,让最高位的二进制进位信号天然等于十进制进位信号——这就是它"便于计算、自动产生进位"的根本原因。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询