十进制数的其它编码方法
也有用多于4位基2码,如用5位、7位、甚至10位基2码,来表示一个十进制数位的方案。有些属于无权码,有些属于有权码。表2.11给出4种编码方案。
表2.11 十进制数位编码方案
十进位 | 无权码 | 有权码 | ||
符号 | 五中取二码 | 蠕变码 | 二元五进制码 5043210 | 独热码 0123456789 |
0 | 11000 | 00000 | 0100001 | 1000000000 |
1 | 00011 | 10000 | 0100010 | 0100000000 |
2 | 00101 | 11000 | 0100100 | 0010000000 |
3 | 00110 | 11100 | 0101000 | 0001000000 |
4 | 01001 | 11110 | 0110000 | 0000100000 |
5 | 01010 | 11111 | 1000001 | 0000010000 |
6 | 01100 | 01111 | 1000010 | 0000001000 |
7 | 10001 | 00111 | 1001000 | 0000000100 |
8 | 10010 | 00011 | 1001000 | 0000000010 |
9 | 10000 | 00001 | 1010000 | 0000000001 |
五中取二码 (2-out-of-5 Code)使用5位基2码,并且每个代码必须包含2个"1"和3个"0",因此提供了一位(或奇数位)检粗能力。
蠕变码(Creeping Code)也用5位基2码,是由一个"1"逐次移位扩展和收缩而形成的,符合格雷码的编码规则。
④ 数字串在计算机内的表示与存储
人们习惯使用10进制数,而在计算机内,采用二进制表示和处理数据更方便。因此,在计算机输入和输出数据时,要进行十→二和二→十的进制转换处理,这是多数应用环境中的实际情况。而在某些特定的应用领域中,如商业统计,其特点是运算简单而数据量很大,这样使输入输出过程中的进制转换所占的时间比例很大。从提高机器的运行效率考虑,也可以采用在计算机内部直接用十进制方式表示和处理数据,这要求计算机内部增加少量硬件线路。目前,大多数通用性较强的计算机,都能直接处理十进制形式表示的数值。采用十进制表示数据的另一个目的,是提高数据的表示范围和运算精度,就是说,十进制数在计算机内是以十进制的数位组成的数串形式存储与计算的,其位数,即串长是可变的,可规定最长可用位数,因此不受二进制整数和浮点数统一格式的约束。
十进制数串在计算机内主要有两种表示形式。
a. 字符串形式,即一个字节存放一个十进制的数位或符号位。在主存中,这样的一个十进制数占用连续的多个字节,故为了指明这样一个数,需要给出该数在主存中的起始地址和位数(串的长度)。
对用这种方式表示的数据进行算术运算是很不方便的,因为每个数字符占用一个字节,其低四位的值表示数值,而高四位的值在进行算术运算时不具有数值的意义。因此,用这种方式表示的十进制字符串,主要用在非数值计算的有关应用领域中。
b. 压缩的十进制数串形式,即一个字节存放两个十进制的数位,它比前一种形式节省存储空间,又便于直接完成十进制数的算术运算,是广泛采用的较为理想的方法。
用压缩的十进制数串表示一个数,要占用主存连续的多个字节,每个数位占用半个字节(即4个二进制位),其值可用二-十进制编码(BCD码,数字符的ASCII码的低4位)表示,符号位也占用半个字节并存放在最低数字位之后,其值选用四位编码的六种冗余状态中的有关值,如用1100表示正号,用1101表示负号。在这种表示中,规定数值位加符号位之和必须为偶数,当其和不为偶数时,应在最高数字位之前补一个0。此时,表示一个数要占用该偶数值位的一半那么多个字节。例如:
+123被表示成 123C, -12 被表示成 012D。
要指明一个压缩的十进制数串,也需给出它在主存中的首地址和数字位个数(不含符号位),又称位长,位长为0的数其值为0。压缩的十进制数串表示方法的优点是位长可变,许多机器中规定该长度从0到31,有的甚至更长。