1,001 1,010 1,011 1,100 1,101 1,110 1,111 无 1,111 1,110 1,101 1,100 1,011 1,010 1,001 1,000 1,110 1,101 1,100 1,011 1,010 1,001 1,000 无 -1 -2 -3 -4 -5 -6 -7 -8 1.001 1.010 1.011 1.100 1.101 1.110 1.111 无 1.111 1.110 1.101 1.100 1.011 1.010 1.001 1.000 1.110 1.101 1.100 1.011 1.010 1.001 1.000 无 -0.125 -0.250 -0.375 -0.500 -0.625 -0.750 -0.875 -1
12. 设浮点数格式为:阶码5位(含1位阶符),尾数11位(含1位数符)。写出51/128、-27/1024、7.375、-86.5所对应的机器数。要求如下:
(1)阶码和尾数均为原码。
(2)阶码和尾数均为补码。
(3)阶码为移码,尾数为补码。 解:据题意画出该浮点数的格式:
阶符1位 阶码4位 数符1位 尾数10位 -5
将十进制数转换为二进制:x1= 51/128= 0.0110011B= 2-1 * 0.110 011B
x2= -27/1024= -0.0000011011B = 2*(-0.11011B) x3=7.375=111.011B=2*0.111011B
x4=-86.5=-1010110.1B=27*(-0.10101101B)
则以上各数的浮点规格化数为: (1)[x1]浮=1,0001;0.110 011 000 0 [x2]浮=1,0101;1.110 110 000 0 [x3]浮=0,0011;0.111 011 000 0 [x4]浮=0,0111;1.101 011 010 0 (2)[x1]浮=1,1111;0.110 011 000 0 [x2]浮=1,1011;1.001 010 000 0 [x3]浮=0,0011;0.111 011 000 0 [x4]浮=0,0111;1.010 100 110 0 (3)[x1]浮=0,1111;0.110 011 000 0 [x2]浮=0,1011;1.001 010 000 0 [x3]浮=1,0011;0.111 011 000 0 [x4]浮=1,0111;1.010 100 110 0
13. 浮点数格式同上题,当阶码基值分别取2和16时: (1)说明2和16在浮点数中如何表示。 (2)基值不同对浮点数什么有影响?
(3)当阶码和尾数均用补码表示,且尾数采用规格化形式,给出两种情况下所能表示的最大正数和非零最小正数真值。
解:(1)阶码基值不论取何值,在浮点数中均为隐含表示,即:2和16不出现在浮点格式中,仅为人为的约定。
(2)当基值不同时,对数的表示范围和精度都有影响。即:在浮点格式不变的情况下,基越大,可表示的浮点数范围越大,但浮点数精度越低。
(3)r=2时,
3
最大正数的浮点格式为:0,1111;0.111 111 111 1
其真值为:N+max=2×(1-2)
非零最小规格化正数浮点格式为:1,0000;0.100 000 000 0
-16-1-17
其真值为:N+min=2×2=2
r=16时,
最大正数的浮点格式为:0,1111;0.1111 1111 11
其真值为:N+max=1615×(1-2-10)
非零最小规格化正数浮点格式为:1,0000;0.0001 0000 00
-16-1-17
其真值为:N+min=16×16=16
14. 设浮点数字长为32位,欲表示±6万间的十进制数,在保证数的最大精度条件下,除阶符、数符各取1位外,阶码和尾数各取几位?按这样分配,该浮点数溢出的条件是什么? 解:若要保证数的最大精度,应取阶码的基值=2。 若要表示±6万间的十进制数,由于32768(215)< 6万 <65536(216),则:阶码除阶符外还应取5位(向上取2的幂)。 故:尾数位数=32-1-1-5=25位 25(32) 该浮点数格式如下: 阶符(1位) 阶码(5位) 数符(1位) 尾数(25位) 15
-10
按此格式,该浮点数上溢的条件为:阶码?25
15. 什么是机器零?若要求全0表示机器零,浮点数的阶码和尾数应采取什么机器数形式?
解:机器零指机器数所表示的零的形式,它与真值零的区别是:机器零在数轴上表示为“0”点及其附近的一段区域,即在计算机中小到机器数的精度达不到的数均视为“机器零”,而真零对应数轴上的一点(0点)。若要求用“全0”表示浮点机器零,则浮点数的阶码应用移码、尾数用补码表示(此时阶码为最小阶、尾数为零,而移码的最小码值正好为“0”,补码的零的形式也为“0”,拼起来正好为一串0的形式)。
16.设机器数字长为16位,写出下列各种情况下它能表示的数的范围。设机器数采用一位符号位,答案均用十进制表示。 (1)无符号数;
(2)原码表示的定点小数。 (3)补码表示的定点小数。 (4)补码表示的定点整数。
(5)原码表示的定点整数。
(6)浮点数的格式为:阶码6位(含1位阶符),尾数10位(含1位数符)。分别写出其正数和负数的表示范围。
(7)浮点数格式同(6),机器数采用补码规格化形式,分别写出其对应的正数和负数的真值范围。
解:(1)无符号整数:0 ~ 2 - 1,即:0~ 65535;
-16
无符号小数:0 ~ 1 - 2 ,即:0 ~ 0.99998;
(2)原码定点小数:-1 + 2-15~1 - 2-15 ,即:-0.99997~0.99997 (3)补码定点小数:- 1~1 - 2-15 ,即:-1~0.99997 (4)补码定点整数:-215~215 - 1 ,即:-32768~32767
16
(5)原码定点整数:-2 + 1~2 - 1,即:-32767~32767
(6)据题意画出该浮点数格式,当阶码和尾数均采用原码,非规格化数表示时: 最大负数= 1,11 111;1.000 000 001 ,即 -2-9?2-31
-931
最小负数= 0,11 111;1.111 111 111,即 -(1-2)?2 则负数表示范围为:-(1-2-9)?231 —— -2-9?2-31 最大正数= 0,11 111;0.111 111 111,即 (1-2)?2 最小正数= 1,11 111;0.000 000 001,即 2-9?2-31
则正数表示范围为:2?2——(1-2)?2
(7)当机器数采用补码规格化形式时,若不考虑隐藏位,则 最大负数=1,00 000;1.011 111 111,即 -2-1?2-32 最小负数=0,11 111;1.000 000 000,即 -1?2 则负数表示范围为:-1?2—— -2?2
最大正数=0,11 111;0.111 111 111,即 (1-2)?2 最小正数=1,00 000;0.100 000 000,即 2-1?2-32 则正数表示范围为:2-1?2-32 ——(1-2-9)?231
17. 设机器数字长为8位(包括一位符号位),对下列各机器数进行算术左移一位、两位,算术右移一位、两位,讨论结果是否正确。
[x1]原=0.001 1010;[y1]补=0.101 0100;[z1]反=1.010 1111;
[x2]原=1.110 1000;[y2]补=1.110 1000;[z2]反=1.110 1000; [x3]原=1.001 1001;[y3]补=1.001 1001;[z3]反=1.001 1001。 解:算术左移一位:
[x1]原=0.011 0100;正确
[x2]原=1.101 0000;溢出(丢1)出错 [x3]原=1.011 0010;正确
[y1]补=0.010 1000;溢出(丢1)出错 [y2]补=1.101 0000;正确
[y3]补=1.011 0010;溢出(丢0)出错 [z1]反=1.101 1111;溢出(丢0)出错 [z2]反=1.101 0001;正确
[z3]反=1.011 0011;溢出(丢0)出错 算术左移两位:
[x1]原=0.110 1000;正确
[x2]原=1.010 0000;溢出(丢11)出错 [x3]原=1.110 0100;正确
[y1]补=0.101 0000;溢出(丢10)出错 [y2]补=1.010 0000;正确
[y3]补=1.110 0100;溢出(丢00)出错 [z1]反=1.011 1111;溢出(丢01)出错 [z2]反=1.010 0011;正确
[z3]反=1.110 0111;溢出(丢00)出错 算术右移一位:
[x1]原=0.000 1101;正确 [x2]原=1.011 0100;正确
-9
31
31
-1
-32
31
-9
-31
-9
31
-9
31
1515
[x3]原=1.000 1100(1);丢1,产生误差 [y1]补=0.010 1010;正确 [y2]补=1.111 0100;正确
[y3]补=1.100 1100(1);丢1,产生误差 [z1]反=1.101 0111;正确
[z2]反=1.111 0100(0);丢0,产生误差 [z3]反=1.100 1100;正确
算术右移两位:
[x1]原=0.000 0110(10);产生误差
[x2]原=1.001 1010;正确
[x3]原=1.000 0110(01);产生误差 [y1]补=0.001 0101;正确
[y2]补=1.111 1010;正确 [y3]补=1.110 0110(01);产生误差 [z1]反=1.110 1011;正确 [z2]反=1.111 1010(00);产生误差 [z3]反=1.110 0110(01);产生误差
18. 试比较逻辑移位和算术移位。
解:逻辑移位和算术移位的区别:
逻辑移位是对逻辑数或无符号数进行的移位,其特点是不论左移还是右移,空出位均补0,移位时不考虑符号位。
算术移位是对带符号数进行的移位操作,其关键规则是移位时符号位保持不变,空出位的补入值与数的正负、移位方向、采用的码制等有关。补码或反码右移时具有符号延伸特性。左移时可能产生溢出错误,右移时可能丢失精度。
19. 设机器数字长为8位(含1位符号位),用补码运算规则计算下列各题。 (1)A=9/64, B=-13/32,求A+B。 (2)A=19/32,B=-17/128,求A-B。 (3)A=-3/16,B=9/32,求A+B。 (4)A=-87,B=53,求A-B。
(5)A=115,B=-24,求A+B。
解:(1)A=9/64= 0.001 0010B, B= -13/32= -0.011 0100B [A]补=0.001 0010, [B]补=1.100 1100
[A+B]补= 0.0010010 + 1.1001100 = 1.1011110 ——无溢出
A+B= -0.010 0010B = -17/64
(2)A=19/32= 0.100 1100B, B= -17/128= -0.001 0001B [A]补=0.100 1100, [B]补=1.110 1111 , [-B]补=0.001 0001
[A-B]补= 0.1001100 + 0.0010001= 0.1011101 ——无溢出 A-B= 0.101 1101B = 93/128B
(3)A= -3/16= -0.001 1000B, B=9/32= 0.010 0100B
[A]补=1.110 1000, [B]补= 0.010 0100
[A+B]补= 1.1101000 + 0.0100100 = 0.0001100 —— 无溢出
A+B= 0.000 1100B = 3/32
(4) A= -87= -101 0111B, B=53=110 101B
[A]补=1 010 1001, [B]补=0 011 0101, [-B]补=1 100 1011
[A-B]补= 1 0101001 + 1 1001011 = 0 1110100 —— 溢出 (5)A=115= 111 0011B, B= -24= -11 000B [A]补=0 1110011, [B]补=1,110 1000
[A+B]补= 0 1110011 + 1 1101000 = 0 1011011——无溢出 A+B= 101 1011B = 91
20. 用原码一位乘、两位乘和补码一位乘(Booth算法)、两位乘计算x·y。 (1)x= 0.110 111,y= -0.101 110; (2)x= -0.010 111,y= -0.010 101; (3)x= 19,y= 35;
(4)x= 0.110 11,y= -0.111 01。
解:先将数据转换成所需的机器数,然后计算,最后结果转换成真值。 (1)[x]原=0.110111,[y]原=1.101110,x*=0.110111, y*=0.101110 原码一位乘:
部分积 0.000 000 +0.000 000 0.000 000 0.000 000 +0.110 111 0.110 111 0.011 011 +0.110 111 1.010 010 0.101 001 +0.110 111 1.100 000 0.110 000 +0.000 000 0.110 000 0.011 000 +0.110 111 010 111 101 011 010 101 001 010 000 101 右移一位 乘数为1,加上x* 右移一位 乘数为1,加上x* 右移一位 乘数为1,加上x* 右移一位 乘数为0,加上0 右移一位 乘数为1,加上x* 乘数y* 101 110 说明 部分积初值为0,乘数为0加0 右移一位 1.001 111 0.100 111 100 010 即x*×y*=0.100 111 100 010,z0=x0? y0=0 ?1=1, [x×y]原=1.100 111 100 010,x·y= -0. 100 111 100 010 原码两位乘:[-x*]补=1.001 001,2x*=1.101 110
部分积 000 . 000 000 +001 . 101 110 001 . 101 110 000 . 011 011 10 001 011 0 0 乘数y* 00 101 110 Cj 0 说明 部分积初值为0,Cj=0 根据yn-1ynCj=100,加2x*,保持Cj=0 右移2位