定点小数的编码

用定点小数引出数值的三种编码(原码、补码和反码)方案是最方便的。

(1) 原码表示法

原码表示法是用机器数的最高一位代表符号,其余各位给出数值绝对值的表示方法。其定义为:

计算机如何执行指令和运算数据(计算机数据表示及运算方法)(1)

例如, X= 0.1011, [X]原=01011

X=-0.1011, [X]原=11011

按定义,当X=-0.1011时,[X]原= 1-X= 1.0000-(-0.1011) =11011,约定小数点在符号位和数值位之间,可省略,这里的X为数的真值,[X]原为原码表示的机器数,是符号位 |X|。

在原码表示中,零有两种表示形式,即 [ 0.0]原=00000, [-0.0]原=10000。

原码表示的优点在于实现乘除运算的规则简单,缺点是实现加减运算很不方便,要比较参与加减运算两个数的符号和两个数的绝对值的大小,才能确定运算结果的数值和符号。

(2) 反码表示法

反码表示法是用机器数的最高一位代表符号,数值位是对负数值各位取反的表示方法,其定义为

计算机如何执行指令和运算数据(计算机数据表示及运算方法)(2)

例如, X= 0.1011, [X]反=01011, X=-0.1011, [X]反=10100

在反码表示中,零有两个编码,即 [ 0.0]反=00000 , [-0.0]反=11111

在当前的计算机系统中很少使用反码,在有些书中也称反码为按1取模的编码。

(3) 补码表示法

补码表示法是用机器数的最高一位代表符号,以下各位给出数值按2取模结果的表示方法,其定义为:

计算机如何执行指令和运算数据(计算机数据表示及运算方法)(3)

例如, X= 0.1011, [X]补=01011, X=-0.1011, [X]补=10101

在补码表示中,0有唯一的编码,即 [ 0.0]补=X =00000, [-0.0]补=2 X MOD 2 = 00000,所以定点小数多出一个编码,可表示-1。例如,X1=X2=-0.1000,则[X1]补=[X2]补 =11000, 那么[X X]补=11000 11000=110000,按2取模后得10000,这是-1的补码表示。

补码表示的机器数和它的真值的关系,是 [X]补 = 2*符号位 X,由此又得到 X=[X]补 - 2*符号位,这个结论在讨论补码乘法是会用到。

补码表示非常适合于进行加减法运算,对符号位与数值位同等处理,只要结果不超出机器能表示的数值范围,将直接得到正确的运算结果,即符号位与数值位都是正确的补码表示,并且可以用实现加法运算的电路完成减法运算,用 [-Y]补 的办法处理减数即可

整数的编码

带符号的整数也可以用原码、补码和反码三种不同的编码方法表示。

可以认为整数是小数点被设置在最低一位数值位的右边,机器数的最高位仍被用作数的符号位。数值的表示范围,以及整数编码的取模值,都与表示一个数所用的二进制位数有关。

例如,对于用n 1个二进制位表示的带符号的整数的补码,其数值范围是-2n≤X <2n,是用机器数的最高一位代表符号,以下各位给出数值按2n 1取模结果的表示方法,其定义为:

计算机如何执行指令和运算数据(计算机数据表示及运算方法)(4)

正数的原码和反码的定义、表示与定点小数部分说明的方法类似,这里从略。

例如, X= 10101 [X]原 =[X]补 =[X]反 =010101

X=-10101 [X]原 =110101,[X]补 =101011,[X]反 =101010

以上两个数的变形补码分别为0010101和1101011。这里的n均为5。

二进制十进制数编码

有些计算机内有专门的十进制运算指令,支持选用十进制数的算术计算。为此要求采用一种二进制编码的十进制数来表示数据,这种编码被称为BCD码(Binary Coded Decimal),使用4位二进制编码来表示十进制数字0~9,有多种具体实现方案,如表2.3所示。

计算机如何执行指令和运算数据(计算机数据表示及运算方法)(5)

按照编码的每一位是否都有固定的权值,表中的编码可分为有权码和无权码两类。显然,8421码、2421码和5211码为有权码;而格雷码、余3码的每一位没有确定的权,所以是无权码。

格雷码又称循环码,其编码规则是使任何两个相邻的代码只有一个二进位的状态不同,在D/A或A/D转换电路中得到很好的运行结果。

用BCD码来表示十进制数字时,1个字节存放2位十进制的数字;符号位放在最低位数字位之后,一般用C(12)表示正号,用D(13)表示负号。例如:+258被表示成258CH,占用两个字节,-34被表示为034DH,也占用两个字节,此处的H指出用的是十六进制数。

,