单独复习一下 BCD码 和 余3码 的关系
我们都知道,余三码是BCD码的一种“改良版”或“功能增强版”。现稍微详细地回顾一下 BCD码 和 余三码,并说明一下这个关系。
1. BCD码
1.1. 定义
BCD码,全称为“二-十进制编码”或“8421码”,是一种用4位二进制数来表示1位十进制数的编码方法。
1.2. 编码规则
由于4位二进制数有16种组合,而表示1位十进制数只需要10种组合。BCD码只使用前10种组合,即 0000
到 1001
,分别对应十进制数字 0
到 9
。剩下的6种组合(1010
到 1111
)在BCD码中是无效的。
它的权重分配非常直观,从高位到低位依次是8、4、2、1,因此也得名8421码。
1.3. 编码表
十进制数字 | BCD码 (8421码) |
---|---|
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
1.4. 特点
直观简单
编码方式与二进制数值本身基本一致,非常容易理解和转换。
易于转换
将十进制数转换为BCD码,只需将每一位十进制数字独立地替换成对应的4位二进制码即可。
例如:十进制 123
的 BCD码是 0001 0010 0011
。
存在浪费
16个编码中只使用了10个,有6个是冗余状态。
运算复杂
进行加法运算时,由于“逢十进一”的规则与二进制的“逢十六进一”不同,当某一位的和大于9时,需要做“+6校正”(即加上 0110
)来修正结果。
2. 余三码
2.1. 定义
余三码是一种无权码,它是在BCD码的基础上加上一个固定的数值“3”(即 0011
)后得到的编码。
2.2. 编码规则
对于一个十进制数字,先找到其对应的BCD码,然后在这个BCD码的值上加上 0011
(即十进制的3),得到的结果就是该数字的余三码。
2.3. 编码表
十进制数字 | BCD码 (8421码) | 余三码 |
---|---|---|
0 | 0000 | 0011 (0+3) |
1 | 0001 | 0100 (1+3) |
2 | 0010 | 0101 (2+3) |
3 | 0011 | 0110 (3+3) |
4 | 0100 | 0111 (4+3) |
5 | 0101 | 1000 (5+3) |
6 | 0110 | 1001 (6+3) |
7 | 0111 | 1010 (7+3) |
8 | 1000 | 1011 (8+3) |
9 | 1001 | 1100 (9+3) |
4. 特点
自补性
这是余三码最重要的特性。观察上表可以发现,0
(0011
) 和 9
(1100
) 的编码互为反码;1
(0100
) 和 8
(1011
) 的编码互为反码,以此类推。这个特性使得在余三码系统中,求一个数的“9的补数”(即9减去该数)变得异常简单,只需将其二进制位按位取反即可。这大大简化了十进制减法运算的硬件设计。
无权码
它的每一位没有固定的权重(如8,4,2,1),因此不能直接按权重计算其数值。
运算优势
当两个余三码相加时,如果产生进位,正好对应十进制运算的“逢十进一”,这简化了加法器的设计。
3. 两者的关系
余三码与BCD码有着直接且紧密的衍生关系。
1. 转换关系
BCD码 → 余三码:在BCD码的基础上 加上 0011
(3)。
公式:余三码 = BCD码 + 0011
余三码 → BCD码:在余三码的基础上 减去 0011
(3)。
公式:BCD码 = 余三码 - 0011
2. 设计哲学的联系
BCD码 的设计哲学是直观映射,追求与十进制数字最直接的对应关系。
余三码 的设计哲学是功能优化,它通过一个简单的数学变换(+3)改变了编码空间,从而获得了BCD码所不具备的自补性和更好的运算特性。
3. 状态空间的联系
两者都使用4位二进制码,但有效的10个编码在16个可能的状态中占据了不同的位置:
BCD码 占据了编码空间的下半部分 (0000
~ 1001
)。
余三码 将BCD码的编码空间整体向上平移了3个单位,占据了中间部分 (0011
~ 1100
)。这使得其编码关于中心对称,从而实现了自补性。
4. 总结对比
特性 | BCD码 (8421码) | 余三码 |
---|---|---|
编码方式 | 有权码 (8,4,2,1) | 无权码 |
与十进制关系 | 直接对应 | BCD码 + 3 |
0的编码 | 0000 | 0011 |
9的编码 | 1001 | 1100 |
主要优点 | 直观,易于转换 | 自补性,简化十进制运算 |
主要缺点 | 运算复杂,需要校正 | 不直观,需转换 |
核心关系 | 基础 | 由BCD码衍生而来,旨在解决BCD码的运算缺陷 |
简单来说,余三码是BCD码的一种“改良版”或“功能增强版”。它通过一个简单的偏移操作,牺牲了直观性,换来了在数字逻辑运算(特别是减法)上的巨大便利。