|
数据在计算机中表示的形式称为机器数,其特点是采用二进制计数制,数的符号用0、1表示,小数点隐含表示而不占位置。机器数对应的实际数值称为数的真值。
|
|
|
无符号数是指全部二进制位均代表数值,没有符号位。对于有符号数,其机器数的最高位是表示正、负的符号位,其余位则表示数值。若约定小数点的位置在机器数的最低数值位之后,则是纯整数;若约定小数点的位置在机器数的最高数值位之前(符号位之后),则是纯小数。
|
|
|
为了便于运算,带符号的机器数可采用原码、反码、补码和移码等不同的编码方法。
|
|
|
|
|
数值X的原码记为[X]原,如果机器字长为n(即采用n个二进制位表示数据),则最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值的绝对值。数值零的原码表示有两种形式:[+0]原=00000000,[-0]原=10000000。
|
|
|
|
数值X的反码记作[X]反,如果机器字长为n,则最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值。正数的反码与原码相同,负数的反码则是其绝对值按位求反。数值0的反码表示有两种形式:[+0]反=00000000,[-0]反=11111111。
|
|
|
|
数值X的补码记作[X]补,如果机器字长为n,则最高位为符号位,0表示正号,1表示负号,其余的n-1位表示数值。正数的补码与其原码和反码相同,负数的补码则等于其反码的末尾加1。在补码表示中,0有唯一的编码:[+0]补=[-0]补=00000000。
|
|
|
|
移码表示法是在数X上增加一个偏移量来定义的,常用于表示浮点数中的阶码。如果机器字长为n,在偏移量为2n-1时,只要将补码的符号位取反便可获得相应的移码表示。偏移量也可以是其他值。采用移码表示时,码值大者对应的真值就大。
|
|
|
|
|
所谓定点数,就是表示数据时小数点的位置固定不变。小数点的位置通常有两种约定方式:定点整数(纯整数,小数点在最低有效数值位之后)和定点小数(纯小数,小数点在最高有效数值位之前)。
|
|
|
设机器字长为n,各种码制表示下的带符号数的范围如下表所示。当机器字长为n时,定点数的补码和移码可表示2n个数,而其原码和反码只能表示2n-1个数(0表示占用了两个编码),因此,定点数所能表示的数值范围比较小,运算中很容易因结果超出范围而溢出。
|
|
|
|
|
|
浮点数是指小数点位置不固定的数,浮点表示法能表示更大范围的数。在十进制中,一个实数可以写成多种表示形式。例如,83.125可写成103×0.083125或104×0.0083125等。同理,一个二进制数也可以写成多种表示形式。例如,二进制数1011.10101可以写成24×0.101110101、25×0.0101110101或26×0.00101110101等。
|
|
|
|
|
其中,E称为阶码,F为尾数,这种表示数的方法称为浮点表示法。
|
|
|
在浮点表示法中,阶码通常为带符号的纯整数,尾数为带符号的纯小数。浮点数的表示格式一般如下:
|
|
|
|
显然,一个数的浮点表示不是唯一的。当小数点的位置改变时,阶码也相应改变,因此可以用多种浮点形式表示同一个数。
|
|
|
浮点数所能表示的数值范围主要由阶码决定,所表示数值的精度则由尾数决定。
|
|
|
为了提高数据的表示精度,当尾数的值不为0时,规定尾数域的最高有效位应为1,这称为浮点数的规格化表示,否则需修改阶码左移或右移小数点的位置,使其变为规格化数的形式。
|
|
|
|
IEEE 754是由IEEE制定的有关浮点数的工业标准,被广泛采用。该标准的表示形式如下:
|
|
|
|
其中,S为数的符号位,为0时表示正数,为1时表示负数;P为指数(阶码),用移码表示(偏移值为2p-1-1,p为阶码的位数);M为尾数,用原码表示。
|
|
|
对于阶码为全0或全1的情况,IEEE 754标准有特别的规定:若P为全0且M为0,则表示真值±0(正负号和数符位有关)。如果P为全1且M是0,则这个数的真值为±∞(与符号位有关);如果P为全1并且M不是0,则规定其不是一个数(NaN)。
|
|
|
目前,计算机中主要使用三种形式的IEEE 754浮点数,如下表所示。
|
|
|
|
|
在IEEE 754标准中,对于单精度浮点数和双精度浮点数,约定小数点左边隐含有一位,通常这位数就是1,因此尾数为1.××…×。
|
|
|