2-1浮点数的表示形式(以2为底):X=S·2j2基数S尾数,绝对值小于1的规格化小数,决定数的有效精度。j阶码,用移码或补码表示的整数,决定数的表示范围。浮点数:表示范围与精度在机器字长一定的情况下,阶码位数越多,尾数位数就越少。阶码j越大:数的表示范围越大,数的表示精度越小。尾数S越大:数的表示精度越大,数的表示范围越小。上溢阶码j最大阶码下溢阶码j最小阶码按机器零处理2-2当浮点数尾数为0时,不论其阶码为何值按机器零处理。机器零或者当浮点数阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理。例、浮点数采用什么机器数形式表示时,可用全0表示机器零?P225阶码用移码表示:最小的阶码是全0;尾数用补码表示:真值0表示为全0。浮点数:表示范围与精度2-3原码规格化后,尾数最高一位一定是1。正数为:0.1XXX….XXX的形式负数为:1.1XXX….XXX的形式补码规格化后,尾数最高一位一定与符号位相反。正数为:0.1XXX….XXX的形式负数为:1.0XXX….XXX的形式浮点数:规格化x=0.10011000×2102-4浮点数的规格化形式(以原码为准)r=2尾数最高位为1r=4尾数最高2位不全为0r=8尾数最高3位不全为0浮点数的规格化r=2左规尾数左移1位,阶码减1右规尾数右移1位,阶码加1r=4左规尾数左移2位,阶码减1右规尾数右移2位,阶码加1r=8左规尾数左移3位,阶码减1右规尾数右移3位,阶码加1基数r越大,可表示的浮点数的范围越大基数不同,浮点数的规格化形式不同基数r越大,浮点数的精度降低浮点数:规格化2-5例、将+写成二进制定点数、浮点数及在定点机和浮点机中的机器数形式。其中数值部分均取10位,数符取1位,浮点数阶码取5位(含1位阶符)。19128解:设x=+19128二进制形式定点表示浮点规格化形式[x]原=1,0010;0.1001100000[x]补=1,1110;0.1001100000[x]反=1,1101;0.1001100000定点机中浮点机中x=0.0010011x=0.0010011x=0.1001100000×2-10[x]原=[x]补=[x]反=0.0010011000浮点数:规格化2-6原码真值最大正数011111110.111…1(23个1)正+|阶码最大|正+|尾数最大|+(1-2-23)*2+127最小正数111111110.100…0(22个0)负+|阶码最大|正+|尾数最小|(规格化)+(2-1)*2-127最大负数111111111.100…0(22个0)负+|阶码最大|负+|尾数最小|(规格化)-(2-1)*2-127最小负数011111111.111…1(23个1)正+|阶码最大|负+|尾数最大|-(1-2-23)*2+127十进制真值最大正数+9+0.999999999正+|阶码最大|正+|尾数最大|(似规格化)+999999999最小正数-9+0.100000000负+|阶码最大|正+|尾数最小|(似规格化)+0.0000000001最大负数-9-0.100000000负+|阶码最大|负+|尾数最小|(似规格化)-0.0000000001最小负数+9-0.999999999正+|阶码最大|负+|尾数最大|(似规格化)-999999999例:设浮点数字长32位,基数2,阶码8位(含一位阶符),尾数24位(含一位尾符)若阶码与尾数同时采用原码和补码表示,且尾数规格化,分别写出对应的最大正数、最小正数、最大负数、最小负数的机器数与十进制真值。2-7原码真值最大正数011111110.111…1(23个1)正+|阶码最大|正+|尾数最大|(规格化)+(1-2-23)*2+127最小正数111111110.100…0(22个0)负+|阶码最大|正+|尾数最小|(规格化)+(2-1)*2-127最大负数111111111.100…0(22个0)负+|阶码最大|负+|尾数最小|(规格化)-(2-1)*2-127最小负数011111111.111…1(23个1)正+|阶码最大|负+|尾数最大|(规格化)-(1-2-23)*2+127补码真值最大正数011111110.111…1(23个1)(规格化)+(1-2-23)*2+127最小正数100000000.100…0(22个0)(规格化)+(2-1)*2-128最大负数100000001.011…1(22个1)(规格化)-(2-1+2-23)*2-128最小负数011111111.000…0(23个0)(规格化)-(1)*2+127注意:负数的补码形式比原码多表示一个(最小负数)。例:设浮点数字长32位,基数2,阶码8位(含一位阶符),尾数24位(含一位尾符)若阶码与尾数同时采用原码和补码表示,且尾数规格化,分别写出对应的最大正数、最小正数、最大负数、最小负数的机器数与十进制真值。2-86-12、设浮点数格式为:阶符1位、阶码4位、数符1位、尾数10位。写出51/128、27/1024、7.375、-86.5所对应的机器数。要求(1)阶码和尾数均为原码;(2)阶码和尾数均为补码;(3)阶码为移码,尾数为补码。解:据题意画出该浮点数的格式:14110阶符阶码数符尾数将十进制数转换为二进制:x1=51/128=(0.0110011)2=2-1(0.110011)2x2=-27/1024=(-0.0000011011)2=2-5(-0.11011)2x3=7.375=(111.011)2=23(0.111011)2x4=-86.5=(-1010110.1)2=27(-0.10101101)2则以上各数的浮点数为:(1)原码+原码[x1]浮=1,0001;0.1100110000(2)补码+补码[x1]浮=1,1111;0.1100110000(3)移码+补码[x1]浮=0,1111;0.1100110000规格化数2-9(1)原码+原码[x2]浮=1,0101;1.1101100000(2)补码+补码[x2]浮=1,1011;1.0010100000(3)移码+补码[x2]浮=0,1011;1.0010100000(1)原码+原码[x3]浮=0,0011;0.1110110000(2)补码+补码[x3]浮=0,0011;0.1110110000(3)移码+补码[x3]浮=1,0011;0.1110110000(1)原码+原码[x4]浮=0,0111;1.1010110100(2)补码+补码[x4]浮=0,0111;1.0101001100(3)移码+补码[x4]浮=1,0111;1.0101001100注:以上浮点数也可采用如下格式:11410数符阶符阶码尾数此时只要将上述答案中的数符位移到最前面即可。2-106-13、浮点数格式同上题,当阶码基值分别取2和16时,(1)说明2和16在浮点数中如何表示。(2)基值不同对浮点数什么有影响?(3)当阶码和尾数均用补码表示,且尾数采用规格化形式,给出两种情况下所能表示的最大正数和非零最小正数真值。(2)当基值不同时,对数的表示范围和精度都有影响。即:在浮点格式不变的情况下,基越大,可表示的浮点数范围越大,但精度越下降。(3)r=2时,最大正数的浮点格式为:0,1111;0.1111111111其真值为:N+max=(1-2-10)×215非零最小规格化正数浮点格式为:1,0000;0.1000000000其真值为:N+min=2-1×2-16=2-17r=16时,最大正数的浮点格式为:0,1111;0.1111111111其真值为:N+max=(1-2-10)×1615非零最小规格化正数浮点格式为:1,0000;0.0001000000其真值为:N+min=2-4×16-16=16-17解:(1)阶码基值不论取何值,在浮点数中均为隐含表示,即:2和16不出现在浮点格式中,仅为人为的约定。一旦确定就不再变了。2-11例:设机器数字长为24位,欲表示±3万的十进制数,试问在保证数的最大精度的前提下,除阶符、数符各取1位外,阶码、尾数各取几位?满足最大精度(尾数位数尽可能的多)可取阶码=4,尾数=24–4–1–1=18解:…阶码=4,5,6,2的幂为+0~+15-0~-15,可反映±3万之间的十进制数∴215=32768214=16384∵215×0.××××××…尾数决定数的有效精度。阶码决定数的表示范围。2-126-14、设浮点数字长为32位,欲表示±6万间的十进制数,在保证数的最大精度条件下,除阶符、数符各取一位外,阶码和尾数各取几位?按这样分配,该浮点数溢出的条件是什么?解:若要保证数的最大精度,应取基=2。若要表示±6万间的十进制数,由于32768(215)6万65536(216),则:阶码的范围+-16(向上取2的幂),阶码取5位。故:尾数位数=32–1–1–5=25位按此格式,该浮点数上溢的条件为:阶码11111该浮点数格式如下:15125阶符阶值数符尾数2-136-15、什么是机器零?若要求全0表示机器零,浮点数的阶码和尾数应采取什么机器数形式?解:机器零指机器数所表示的零的形式。它与真值零的区别是:机器零在数轴上表示为“0”点及其附近的一段区域,即在计算机中小到机器数的精度达不到的数均视为“机器零”;而真零对应数轴上的一点(0点)。若要求用“全0”表示浮点机器零,则阶码应用移码、尾数用补码表示P225(此时阶码为最小阶、尾数为零,而移码的最小码值正好为“0”,补码的零的形式也为“0”,拼起来正好为一串0的形式)。2-146-18、试比较逻辑移位和算术移位。解:逻辑移位和算术移位的区别:逻辑移位是对逻辑数或无符号数进行的移位,其特点是不论左移还是右移,空出位均补0,不考虑符号位。算术移位是对带符号数进行的移位操作,其关键规则是移位时符号位保持不变,空出位的补入值与数的正负、移位方向、采用的码制等有关。补码或反码右移时具有符号延伸特性。左移时可能产生溢出错误,右移时可能丢失精度。•原码运算中的移位为逻辑移位,右移时补零,不补符号位。•补码运算中的移位为算数移位,右移时前补符号位。P235-2362-151右移添1左移添00反码补码原码负数0原码、补码、反码正数添补代码码制算术移位规则:符号位不变P235-2362-166-17、设机器数字长为8位(包括一位符号位),对下列各机器数进行算术左移一位、两位,算术右移一位、两位,讨论结果是否正确。算术左移一位:[x1]原=0.0110100;正确[x2]原=1.1010000;溢出(丢1)出错[x3]原=1.0110010;正确[y1]补=0.0101000;溢出(丢1)出错[y2]补=1.1010000;正确[y3]补=1.0110010;溢出(丢0)出错[z1]反=1.1011111;溢出(丢0)出错[z2]反=1.1010001;正确[z3]反=1.0110011;溢出(丢0)出错[x1]原=0.0011010;[x2]原=1.1101000;[x3]原=1.0011001;[y1]补=0.1010100;[y2]补=1.1101000;[y3]补=1.0011001;[z1]反=1.0101111;[z2]反=1.1101000;[z3]反=1.0011001。正数最高位丢1,出错;最低位丢1,影响精度。P235-236负数最高位丢1:原码出错,最低位丢1,影响精度。最高位丢0:补码出错,最低位丢1,影响精度。最高位丢0:反码出错,最低位丢0,影响精度。2-17算术左移两位:[x1]原=0.1101000;正确[x2]原=1.0100000;溢出(丢11)出错[x3]原=1.1100100;正确[y1]补=0.1010000;溢出(丢10)出错[y2]补=1.0100000;正确[y3]补=1.1100100;溢出(丢00)出错[z1]反=1.0111111;溢出(丢01)出错[z2]反=1.0100011;正确[z3]反=1.1100111;溢出(丢00)出错[x1]原=0.001