news 2026/6/10 7:37:51

余3码(Excess-3 Code)加法进位原理详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
余3码(Excess-3 Code)加法进位原理详解

一、余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 进位"两个不同的进位条件统一起来,让最高位的二进制进位信号天然等于十进制进位信号——这就是它"便于计算、自动产生进位"的根本原因。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 7:37:06

破局异构计算与海量协议:基于 Docker 容器化的国标 GB28181/RTSP 边缘计算 AI 视频管理平台架构设计与源码交付实践

在安防行业从事系统架构设计的这十多年里&#xff0c;我深知“烟囱式”开发给企业带来的痛楚。每当新项目落地&#xff0c;团队总会陷入无休止的内耗中&#xff1a;上游要面对海康、大华、宇视等不同厂商零散的 GB28181、RTSP、Onvif 协议接入&#xff1b;下游则要面对 Nvidia …

作者头像 李华
网站建设 2026/6/10 7:36:12

SAMBA服务器配置教程——手把手教你

#这是centos 7 cd /etc/yum.repos.d/ mkdir backup mv *.repo backup/curl -o CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo sed -i s|http://mirrors.aliyun.com/centos/7/|http://mirrors.aliyun.com/centos-vault/7.9.2009/|g CentOS-Base.repoyum clean…

作者头像 李华
网站建设 2026/6/10 7:30:20

GDB 调试工具入门教程:从零开始手把手教你调试 C/C++ 程序

一、前言 在学习 C/C、Linux 编程、嵌入式开发、ROS 开发或者操作系统相关课程时&#xff0c;很多同学都会遇到一个问题&#xff1a;程序能编译&#xff0c;但是运行结果不对&#xff1b; 程序运行一半突然崩溃&#xff1b; 出现 Segmentation fault&#xff0c;却不知道错在哪…

作者头像 李华
网站建设 2026/6/10 7:24:10

DGX系列有铁芯直线电机模组结构与性能分析

能点到点快速定位型有铁芯直线电机模组&#xff0c;重复定位精度达微米级&#xff0c;适用于对定位速度与精度均有要求的自动化应用场景。模组采用有铁芯直线电机。有铁芯结构磁路磁阻低&#xff0c;同体积下推力密度高于无铁芯方案&#xff0c;在重负载高速运动中优势明显。该…

作者头像 李华
网站建设 2026/6/10 7:24:08

openEuler安装MongoDB指导

openEuler安装MongoDB 8.2.7 实验报告 0 软件版本 > Linux版本&#xff1a;OpenEuler 24.03 SP2 LTS > Hadoop版本&#xff1a;hadoop3.4.1 > HBase版本&#xff1a;hbase2.6.4 > MongoDB版本&#xff1a;8.2.7 > MongoDB Compass版本&#xff1a;1.45.4…

作者头像 李华