前面已经说到,在计算机内,浮点数被表示为如下格式:
通常情况下,数的符号位Ms,仍然采用0表示正号、1表示负号的规则。数的尾数部分M采用定点小数形式表示,可用原码(或补码)等编码方式。讨论浮点数的编码方法的关键,是确定对阶码部分的编码方法。
在多数通用计算机中,浮点数的阶码部分多采用整数形式的移码表示。对由1位符号位和n位数值位组成的二进制形式的阶码,其移码的定义为:
[X] 移 = 2n + X -2-n ≤ X < 2n (2.15)
将这一定义与整数补码的定义相比较,
[X]补 =(2.16 )
就可找出移码和补码之间的如下关系:
当 0 ≤ X < 2 n 时,[X]移= 2 n + X = 2 n + [X]补
-2 n≤ X < 0 时,[X]移= 2n + X = (2n+1 + X) - 2n
这表明,由[X]补 得到 [X]移 的方法是变 [X]补 的符号为其反码。例如:
X = +1011, [X]补 = 01011, [X]移 = 11011
X = -1011, [X]补 = 10101, [X]移 = 00101
移码的性质:
最高一位为符号位,但其取值与原码和补码都相反,1代表正号,0代表负号。
移码只用于表示浮点数的阶码,故只用于整数。
对移码一般只执行加减运算,在对两个浮点数进行乘除运算时,是尾数实现乘除运算,阶码执行加减运算。对移码执行加减运算时,需要对得到的结果加以修正,修正量为2n,即要对用移码求得的符号位取反后,得到的才是移码形式的正确结果。
在移码表示中,0有唯一的编码,即 [+0]移 = [-0]移 = 1000…0。而且浮点数机器零的形式为000…000。当浮点数的阶码≤-2 n时,不管尾数值大小如何,都属于浮点数下溢,被认为其值是0。此时,移码表示的阶码值正好是每一位都为0的形式,这有利于简化机器中的判0线路。