(4)十进制数的编码与运算
十进制数的每一个数位的基为10,但到了计算机内部,出于存储与计算方便的目的,必须采用基2码对每个十进制数位进行重编码,所需要的最少的基2码的位数为log210,取整数为4。4位基2码有16种不同的组合,怎样从中选择出10个组合来表示十进制数位的0-9,有非常多的可行方案,下面介绍其中的最常用的几种。
① 十进制有权码
是指表示一个十进制数位的4位基2码的每一位有确定的位权。
用得最普遍的是8421码,即4个基2码位的权从高向低分别为8、4、2和1,使用基2码的0000、0001、…1001这10种组合,分别表示0到9这十个值。这种编码的优点是这4位基2码之间满足二进制的规则,而十进制数位之间则是十进制规则,故称这种编码为以二进制编码的十进制(Binary
Coded Decimal)数,简称BCD码或二-十进制码。另一个优点是在数字符的ASCII码与这种编码之间的转换方便,即取每个数字符的ASCII码的低4位的值便直接得到该数字的BCD码,入/出操作简便。在计算机内实现BCD码之间的算术运算要复杂一些,在某些情况下,需要对加法运算的结果进行修正。修正规则是:
若两个8421码数相加之和等于或小于1001,即10进制的9,不需要修正;
若相加之和在10到15之间,一方面应向高位产生一进位,本位还要进行加6修正,进位是在进行加6修正时产生的;
若相加之和在16和18之间时,向高位的进位会在相加过程中自己产生,对本位还需进行加6修正。下面给出三种情况下的具体例子。
例如,1+8=9的运算结果是正确的,不必修正。
0 0 0 1
+)1 0 0 0 (1)10+(8)10=(9)10
1 0 0 1
而4+9的结果就必须用 +6 修正,进位是在修正过程中产生的。
0 1 0 0
+)1 0 0 1 (4)10+(9)10 =(1)10
(3)10
1 1 0 1
+) 0 1 1 0

1 0 0 1 1
而7+9的结果也必须用 +6 修正,进位是在相同加过程中产生的。
0 1 1 1
+)1 0 0 1 (7)10+(9)10 =(1)10(6)10

1 0 0 0 0
+) 0 1 1 0

1 0 1 1 0
另外几种有权码,如2421、5211、84-2-1、4311码(表2.9),也都是用4位有权基2码表示一个十进制数位,但这4位基2码之间并不符合二进制规则。这几种有权码的特性表现为:
当采用2421、5211和4311编码时,任何两个十进制数位相加产生10或大于10的结果,相应的基2码相加会向高一位产生进位,有利于实现逢十进位的计数和加法规则。
任何两个相加之和等于9的十进制数位的基2码,互为反码,即满足十进制数按9互补(9's Complement)的关系,有利于简化减法处理。表2.9给出的是上面提到的十进制数位的编码方案。
表2.9
四位有权码
十进制数
|
8421码
|
2421码
|
5211码
|
840201码
|
4311码
|
0
|
0000
|
0000
|
0000
|
0000
|
0000
|
1
|
0001
|
0001
|
0001
|
0111
|
0001
|
2
|
0010
|
0010
|
0011
|
0110
|
0011
|
3
|
0011
|
0011
|
0101
|
0101
|
0100
|
4
|
0100
|
0100
|
0111
|
0100
|
1000
|
5
|
0101
|
1011
|
1000
|
1011
|
0111
|
6
|
0110
|
1100
|
1010
|
1010
|
1011
|
7
|
0111
|
1101
|
1100
|
1001
|
1100
|
8
|
1000
|
1110
|
1110
|
1000
|
1110
|
9
|
1001
|
1111
|
1111
|
1111
|
1111
|
|