笔者这周开始学习数字逻辑电路设计。在复习过程中,对BCD码中余三码加法,若进位,需加3修正的规则产生了诸多疑惑,归纳记录如下:
- 为什么如果产生进位,需要进行加3,而非减3?
- 为什么进位后,最高位以外数位上的数字在修正前转换为了8421码的规则?
在进行了思考之后,我得出结论如下:
为什么如果产生进位,需要进行加3而非减3?
余三码是一种对9的自补码,所以在任何情况下,如果加法运算后得到了9的结果,修正前结果都记为1111
。
e.g.
1100 9
+ 0011 0
--------
1111 12 //未修正
- 0011 3 //减三修正
--------
1100 9
如果产生了进位,则1111
至少再增加了0001
。这种情况下,BCD码由1111
进位为1 0000
(十位)+0 xxxx
(个位),表示的真值由9
进位为1 0
+0 x
。
这意味着,由于对9自补码的性质,***余三码***会与**其表示的十进制数同步在十进制数10
处发生进位,从而使最高位以外数位上的数全部归零。(对于上例,在只讨论进位过程的情况下,个位分别归零为0000
和0
)
而归零则意味着余三码相加余6的性质,已经无法再用原本的四位二进制码(xxxx
)进行描述,必须放到符合原运算规律的五位二进制码代数系统中(x xxxx
)进行讨论。
但1 0000
减三修正后得到1101
,已经超出余三码的范围,因此需要将其转换到更高一位上去,即0001 0000
(未修正),再对每个数位分别加三,使之转换回余三码0100 0011
,这样就可以将其分解,继续在四位二进制码的范围内进行符合原有规则的运算(在原有的代数系统中进行运算)。
为什么进位后,最高位以外数位上的数字在修正前转换为了8421码的规则?
如上所述,因为余三码是对9的自补码,所以十-二进制数和表示的十进制数是正巧同步进位的(在1111
/9
加1,即十进制10处)。两者除最高位数以外,会同步归零,此时每个数位就进入了8421码的规则(0000
表示0
),需要通过加3重新成为余三码。但如果就未划分数位的五位二进制数整体来看,理论上是可以视作余三码的,依旧可以通过减去3回归余三码,但这样做会超出余三码的范围(>1100
),实际上无法操作。