计算机不直接表示小数点,为了简化设计与制造,默认小数点位于数值的前部或者后部。这样的数据称为定点数,小数点被默认位于数值前部的叫顶点小数,被默认位于数值后部的叫定点整数。一般的计算机只选择实现一种定点数。
在定点数表示格式中,最高位被当做符号位。也就是说,定点数的最高位为0,表示它是正数;为1,表示它是负数。
补码转换方法:正数的补码就是它的原码;负数的补码就是将其原码,除符号位外,每位取反(即0变成1,1变成0),然后在最低位加1而得。(The Least Sianificant Bit)
对于正数,反码就是与原码和补码相同,直接在二进制数值前面加上符号位“0”即可。对于负数,反码就是将负号“-”替换成“1”,然后将二进制数值逐位取反而得到。
如果我们给每一个二进制整数的真值加上一个常数2^n(n为二进制真值的位数),使得正数的最高位变成“1”,负数的最高位变成“0”,那么,机器比较得到的两个数之间的相对大小就是其真实的相对大小。这样得到的编码称为“移码(Bias)”。
例:求下列真值的原码,反码和补码
+1110B
原码:0,1110B;反码:0,1110B;补码:0,1110B
-1110B
原码:1,1110B;反码:1,0001B;补码:1,0010B
+0.0001000B
原码:0.0001000B;反码:0.0001000B;补码:0.0001000B
-0.0001000B
原码:1.0001000B;反码:1.1110111B;补码:1.1111000B
计算机能够直接处理的数只能是定点数,要么是定点小数,要么是定点整数。如何用定点数来表示小数点位置“浮动的”实际数据——浮点数?解决这个问题可以转化为科学计数法。
采用科学计数法,浮点数N将被表示成N=M*R^E。式中,M称为尾数,是一个带小数点的实数;R称为基值,是一个常整数;E称为阶码,是一个整数。
浮点数表示的工业标准——IEEE标准754
在IEEE标准754中,浮点数的最高位为尾数符号位S,次高位字段为以移码表示的阶码E,低位字段为尾数F(F=b0b1b2~bp-1),其中P为尾数的位数,基值为2。
1985年发布的标准有以下4种格式的浮点数:
(1)基本的单精度格式(也称短实数):E占8位,F占23位,共32位;
(2)基本的双精度格式(也称长实数):E占11位,F占52位,共64位;
(3)扩充的单精度格式:E>=11位,F>=31位;
(4)扩充的双精度格式:E>=15位,F>=63位;
目前,在计算机上广泛采用的是基本的单精度与双精度格式。单精度格式的阶码E的表数范围在1~254之间(偏移127),对应的实际阶码值在-126~+127之间。双精度格式的阶码的表数范围在1~2046(偏移1023),对应的实际阶码值在-1022~+1023之间。
IEEE标准754规定:规格化尾数在小数点前还有一位隐含的“1”。
其好处在于尾数的有效数字增加一位,即对于基本的单精度与双精度格式,它们尾数的有效数字分别是24位和53位。因此,绝对值最小的规格化数分别为±2^(-126)和±2^(-1022)(对应E=1,F=0),绝对值最大的规格化数分别为±(2-2^(-23))*2^127和
±(2-2^(-52))*2^1023。
例:将十进制数-53/512按照IEEE标准754分别表示成短实数与长实数。
-53/512=-0.000110101B
-0.000110101B=(-1.10101)*2^(-100B)
数符位S为1,阶码E十进制为-4+127=123,转换为二进制为01111011B
尾数后位补0
=1,011 1101 1,101 0100 0000 0000 0000 0000
=BDD40000H
//长实数可自行推导