计算机组成原理第二版课后答案 下载本文

解:若要保证数的最大精度,应取阶的基=2。 若要表示±6万间的十进制数,由于32768(215)< 6万 <65536(216),则:阶码除阶符外还应取5位(向上取2的幂)。 故:尾数位数=32-1-1-5=25位 25(32) 该浮点数格式如下: 1 5 1 3 按此格式,该浮点数上溢的条件为:阶码 25

15. 什么是机器零?若要求全0表示机器零,浮点数的阶码和尾数应采取什么机器数形式?

解:机器零指机器数所表示的零的形式,它与真值零的区别是:机器零在数轴上表示为―0‖点及其附近的一段区域,即在计算机中小到机器数的精度达不到的数均视为―机器零‖,而真零对应数轴上的一点(0点)。若要求用―全0‖表示浮点机器零,则浮点数的阶码应用移码、尾数用补码表示(此时阶码为最小阶、尾数为零,而移码的最小码值正好为―0‖,补码的零的形式也为―0‖,拼起来正好为一串0的形式)。

16. 设机器数字长为16位,写出下列各种情况下它能表示的数的范围。设机器数采用一位符号位,答案均用十进制表示。 (1)无符号数; (2)原码表示的定点小数; (3)补码表示的定点小数; (4)补码表示的定点整数; (5)原码表示的定点整数; (6)浮点数的格式为:阶符1位、阶码5位、数符1位、尾数9位(共16位)。分别写出其正数和负数的表示范围(非规格化浮点形式); (7)浮点数格式同(6),机器数采用补码规格化形式,分别写出其对应的正数和负数的真值范围。

解:各种表示方法数据范围如下:(1)无符号整数:0 ~ 216 - 1, 即:0 ~ 65535; 无符号小数:0 ~ 1 - 2-16 , 即:0 ~ 0.99998; (2)原码定点小数: 1 - 2-15 ~ -(1 - 2-15), 即:0.99997 ~ -0.99997; (3)补码定点小数:1 - 2-15 ~ - 1 , 即:0.99997~ -1; (4)补码定点整数:215 - 1 ~ -215, 即:32767 ~ -32768; (5)原码定点整数: 215 - 1 ~ -(215 - 1), 即:32767 ~ -32767; (6)据题意画出该浮点数格式: 1 5 1 9

最大负数=1,11 111;1.000 000 001 最小负数=0,11 111;1.111 111 111 则负数表示范围为: (1-2-9)~ 2-32′(1-2-9) 2)当采用阶移尾原非规格化数时, 正数表示范围为: 231 ′(-2-9)~ -231 ′2-31 (1-2-9) 注:零视为中性数,不在此范围内。′(-2-9)~ -231′ 2-9 负数表示范围为: 2-32 ′

(7)当机器数采用补码规格化形式时,若不考虑隐藏位,则 最大正数=0,11 111;0.111 111 111 最小正数=1,00 000;0.100 000 2-1 最大负数=1,00 000;1.011 111 111′(1-2-9)~2-32 ′000 其对应的正数真值范围为: 231 (2-1+2-9)~ 231′最小负数=0,11 111;1.000 000 000 其对应的负数真值范围为: -2-32 (-1)′

,不要用£或3 注意: 1)应写出可表示范围的上、下限精确值(用>或<)。 2)应用十进制2的幂形式分阶、尾两部分表示,这样可反映出浮点数的格式特点。括号不要乘开,不要用十进制小数表示,不直观且无意义。 3)书写时二进制和十进制不能混用(如:231写成1031)。 MSB位=1)?4)原码正、负域对称,补码正、负域不对称,浮点数阶、尾也如此。特别要注意浮点负数补码规格化范围。(满足条件:数符

17. 设机器数字长为8位(包括一位符号位),对下列各机器数进行算术左移一位、两位,算术右移一位、两位,讨论结果是否正确。 [x1]原=0.001 1010; [x2]原=1.110 1000; [x3]原=1.001 1001; [y1]补=0.101 0100; [y2]补=1.110 1000; [y3]补=1.001 1001; [z1]反=1.010 1111; [z2]反=1.110 1000; [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;正确 [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 0010)2 B= -13/32=(-0.011 0100)2 [A]补=0.001 0010 [B]补=1.100 1100 [A+B]补= 0. 0 0 1 0 0 1 0 + 1. 1 0 0 1 1 0 0 1. 1 0 1 1 1 1 0 ——无溢出 A+B=( -0.010 0010)2 = -17/64 (2)A=19/32=(0.100 1100)2 B= -17/128=(-0.001 0001)2 [A]补=0.100 1100 [B]补=1.110 1111 [-B]补=0.001 0001 [A-B]补= 0. 1 0 0 1 1 0 0 + 0. 0 0 1 0 0 0 1 0. 1 0 1 1 1 0 1 ——无溢出 A-B=(0.101 1101)2 = 93/128

(3)A= -3/16=(-0.001 1000)2 B=9/32=(0.010 0100)2 [A]补=1.110 1000 [B]补= 0.010 0100 [A+B]补= 1. 1 1 0 1 0 0 0 + 0. 0 1 0 0 1 0 0 0. 0 0 0 1 1 0 0 —— 无溢出 A+B=(0.000 1100)2 = 3/32 (4)A= -87=(-101 0111)2 B=53=(110 101)2 [A]补=1,010 1001 [B]补=0,011 0101 [-B]补=1,100 1011 [A-B]补= 1,0 1 0 1 0 0 1 + 1,1 0 0 1 0 1 1 0,1 1 1 0 1 0 0 —— 溢出 A-B=(-1,000 1100)2 = -140 (5)A=115=(111 0011)2 B= -24=(-11 000)2 [A]补=0,111 0011 [B]补=1,110 1000 [A+B]补= 0,1 1 1 0 0 1 1 + 1,1 1 0 1 0 0 0 0,1 0 1 1 0 1 1——无溢出 A+B=(101 1011)2 = 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]原=x=0.110111,[y]原=1.101110 x*=0.110111, y*=0.101110 1=1 x*×y*=0.100 111 100 010 [x×y]原=1.100? y0=0 ?x0=0,y0=1,z0=x0 111 100 010 x·y= -0. 100 111 100 010

原码一位乘: 部分积 1 0 . 0? 乘数y* 0 . 0 0 0 0 0 0 . 1 0 1 1 1 0 —— +0 0 0 0 0 0 0 . 1 0 1 1 1 —— +x* + 0 . 1 1 0 1 1 1 0 1 0 . 0 1 1 0 1 1 1 0 . 1 0 1 1 —— +x* +?. 1 1 0 1 1 1 1 0 . 1 0 1 0 0 1 0 1 ? 0 . 1 1 0 1 1 1 1 . 0 1 0 0 1 0 1 0 .?0 . 1 0 1 —— +x* + 0 . 1 1 0 1 1 1 1 . 1 0 0 0 0 0 1 0 . 0 1 1 0 0 0 0?1 1 0 0 0 0 0 0 1 0 . 1 0 —— +0 1 ? 0 0 1 0 . 1 —— x* + 0 . 1 1 0 1 1 1 1 . 0 0 1 1 1 1 0 . 1 0 0 1 1 1 1 0 0 0 1 0

2x*=01.101110,[-x*]补=[-x]补=1.001001 原码两位乘: 部分积 乘数 Cj 0 0 0 . 0 0 0 0 0 0 0 0 . 1 0 1 1 1 0 0 + 0 0 1 . 1 0 1 1 1 0 +2x* 0 0 1 . 1 0 1 1 2 0 0 0 . 0 1 1 0 1 1 1 0 0 0?1 0 0 .1 0 1 1 + 1 1 1 . 0 0 1 0 0 1 +[-x*]补 1 1 1 . 2 1 1 1 . 1 1 1 0 0 1 ?1 0 0 1 0 0 1 0 0 1 0 0 0 .1 0 + 1 1 1 . 0 0 1 0 0 1 +[-x*]补 2 1 1 1 . 1 1 0 0? 1 1 1 . 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 0 0 . + 0 0 0 . 1 1 0 1 1 1 +x* 0 0 0 . 1 0 0 1 1 1 1 0 0 0 1 0 0 结果同一位乘,x·y= -0. 100 111 100 010

[x]补=x=0.110111 [y]补=1.010010 [-x]补=1.001001 [2x]补=01.101110 [-2x]补=10.010010 [x×y]补=1.011 000 011 110 0 x·y= -0.100 111 100 010 0 补码一位乘、两位乘运算过程如下:

补码一位乘:部分积 乘数[y]补 yn+1 0 0 1 0 0 . 0 0 0 0?. 0 0 0 0 0 0 1 . 0 1 0 0 1 0 0 —— +0 0 0 0 1 . 0 1 0 0 1 0 + 1 1 . 0 0 1 0 0 1 1 1 1 . 1 0 0 1 0 0 1? +[-x]补 1 1 . 0 0 1 0 0 1 0 1 . 0 1 0 0 1 + 0 0 . 1 1 0 1 1 1 1 0 0 . 0 0 1 1 0 1 1 1 0 1? +[x]补 0 0 . 0 1 1 0 1 1 1 0 0 . 0 0 0 1 1 0 1 1 1 0 1 . 0 ? . 0 1 0 0 —— +0 1 0 + 1 1 . 0 0 1 0 0 1 +[-x]补 1 1 1 1 . 1 0 0 1 1 1 1 1 1 1 0 1 . 0 1?1 . 0 0 1 1 1 1 + 0 0 . 1 1 0 1 1 1 +[x]补 0 0 . 0 1 1 1 0 0 . 0 0 1 1 1 1 0 1 1 1 1 0 1 . 0 + 1 1?1 1 0 . 0 0 1 0 0 1 +[-x]补 1 1 . 0 1 1 0 0 0 0 1 1 1 1 0 0 —— 清0

补码两位乘: 部分积 乘数 yn+1 0 0 0 . 0 0 0 0 0 0 1 1 . 0 1 0 0 1 0 0 + 1 1 0 . 0 1 0 0 1 0 +[-2x]补 1 1 0 . 0 2 1 1 1 . 1 0 0 1 0 0 1 0?1 0 0 1 0 1 1 .0 1 0 0 1 + 0 0 0 . 1 1 0 1 1 1 2 0 0 0 . 0?+[x]补 0 0 0 . 0 1 1 0 1 1 0 0 1 1 0 1 1 1 0 1 1 .0 1 0 + 0 0 0 . 1 1 0 1 1 1 +[x]补 0 0 0 . 1 1 1 1 0 1 2 0 0 0 . 0 0 1 1 1 1 0 1 1 1 1 0 1 1 . 0 + 1 1 1 .? 0 0 1 0 0 1 +[-x]补 1 1 1 . 0 1 1 0 0 0 0 1 1 1 1 0 0 0 . 结果同补码一位乘, x·y= -0. 100 111 100 010 00

(2) x= -0.010111, y= -0.010101 [x]原=1.010111, [y]原=1.010101 x*=0. 010111 , y*=0. 010101 [-x*]补=1.101001,2x*=0.101110 1=0 [x]补=1.101001,? y0=1 ?[-2x*]补=1.010010 x0=1,y0=1,z0=x0 [y]补=1.101011 [-x]补=0.010111,[2x]补=1.010010 [-2x]补=0.101110 x*×y*=0.000 111 100 011 [x×y]原=0.000 111 100 011 [x×y]补=0.000 111 100 011 0 x·y= 0. 000 111 100 011 运算过程如下: 原码一位乘: 部分积 乘数y* 0 . 0 0 0 0 0 0 . 0 1 0 1 0 1 —— +x* 1 0 . 0 0 1 0 1 1 1 .?+ 0 . 0 1 0 1 1 1 0 . 0 1 0 1 1 1 1 0 . 0 0 0 1 0 1 1 1 . 0 1 0 1?0 1 0 1 0 —— +0 1 0 . 0 0 1 1 1 0 ?—— +x* + 0 . 0 1 0 1 1 1 0 . 0 1 1 1 0 0 1 0 . 0 0 0 1 1 1 0 0 1 1 .? 0 1 1 . 0 1 0 —— +0 1 0 . 0 0 1 1?0 1 —— +x* + 0 . 0 1 0 1 1 1 0 . 0 1 1 1 1 0 1 0 . 0 0 0 1 1 1 1 0 0 ?1 1 0 0 0 1 1 . 0 —— +0 0 1 1

原码两位乘: 部分积 乘数y* Cj 0 0 0 . 0 0 0 0 0 0 0 0 . 0 1 0 1 0 1 0 + 0 0 0 . 0 1 0 1 1 1 +x* 0 0 0 . 0 1 0 1 1 1 2 0 0 0 . 0 0 0 1 0 1 1 1 0 0 .0 1 0 1 + 0 0 0 .? 0 0 1 0 1 1 1 +x* 0 0 0 . 0 1 1 1 0 0 2 0 0 0 . 0 0 0 1 1 1 0 0 1 1 0 0 .0 1 ? 0 + 0 0 0 . 0 1 0 1 1 1 +x* 0 0 0 . 0 1 1 1 1 0 2 0 0 0 . 0 0 0 1 1 1 ? 0 1 0 0 0 1 1 0 0 . +0 结果同一位乘, x·y= 0. 000 111 100 011

补码一位乘:部分积 乘数[y]补 yn+1 0 0 . 0 0 0 0 0 0 1 . 1 0 1 0 1 1 0 + 0 0 . 0 1 0 1 1 1 1 0 0 . 0 0 1 0 1 1 ? +[-x]补 0 0 . 0 1 0 1 1 1 1 0 0 . 0 0 0 1 0 1 1 1 ? 1 1 . 1 0 1 0 1 1 —— +0 1 . 1 0 1 0 1 + 1 1 . 1 0 1 0 0 1 1 1 1 . 1 1 0 1 1 1 0 1 1 1 . 1?+[x]补 1 1 . 1 0 1 1 1 0 0 1 0 + 0 0 . 0 1 0 1 1 1 +[-x]补 1 0 0 . 0 0 0 1 1 1 0 0 1 1 1 . 1 0? 0 0 . 0 0 1 1 1 0 1 + 1 1 . 1 0 1 0 0 1 +[x]补 1 1 . 1 1 1 1 . 1 1 1 0 0 0 0 0 0 1 1 1 . 1 0 + ?1 0 0 0 0 0 0 . 0 1 0 1 1 1 +[-x]补 0 0 . 0 0 1 1 1 1 0 0 . 0 0 0 1 1 1 1 0 0 0 1 1 1 . 1 ——?1 +0

补码两位乘: 部分积 乘数 yn+1 0 0 0 . 0 0 0 0 0 0 1 1 . 1 0 1 0 1 1 0 + 0 0 0 . 0 1 0 1 1 1 2 0 0 0 . 0 0 0? +[-x]补 0 0 0 . 0 1 0 1 1 1 1 0 1 1 1 1 1 .1 0 1 0 1 + 0 0 0 . 0 1 0 1 1 1 +[-x]补 0 0 0 . 0 1 1 1 0 0 2 0 0 0 . 0 0 0 1 1 1 0 0 1 1 1 1 . 1 0 1 + 0 0 0 .? 0 1 0 1 1 1 +[-x]补 0 0 0 . 0 1 1 1 1 0 2 0 0 0 . 0 0 0 1 1 1 1 0 0 0 1 1 ? 1 1 . 1 清0 +0 结果同补码一位乘, x·y= 0. 000 111 100 011 00

(3) x= 19, y= 35 x=(10 011)2,y=(100 011)2 x*= [x]原= [x]补= 0,010 011 y*= [y]原= [y]补= 0,100 011 [-x*]补= [-x]补= 1,101 101 2x*= [2x]补= 0,100 110 0=0 x*×y*=? y0=0 ?[-2x*]补= [-2x]补= 1,011 010 x0=0,y0=0,z0=x0 [x×y]原= [x×y]补 = 0,001 010 011 001 x·y =665 运算过程如下:

原码一位乘: 部分积 乘数y* 0,0 0 0 0 0 0 1 0 0 0 1 1 —— +x* + 0,0 1 0 0 1 1 0,0 1 0 0 1 1 1 0,0 0 1 0 0 1 1 1 0 0 0 1 —— +x* + 0,0 1 0 0 1 1? 1 0,0 0 1 1 1 0 0 1 1 0 0 0 —— +0? 0,0 1 1 1 0 0 1 0,0 0 0 0 1 1 ?1 0,0 0 0 1 1 1 0 0 1 1 0 0 —— +0 ? 1 0,0 0 0 0 0 1 1 1 0 0 1? 1 0 0 1 1 0 —— +0 1 0,0 0 1 0 1 0 ? 1 —— +x* + 0,0 1 0 0 1 1 0,0 1 0 1 0 0 0 1 1 0 0 1

原码两位乘: 部分积 乘数y* Cj 0 0 0,0 0 0 0 0 0 0 0,1 0 0 0 1 1 0 + 1 1 1,1 0 1 1 0 1 +[-x*]补 1 1

1,1 0 1 1 0 1 2 1 1 1,1 1 1 0 1 1 0 1 0 0,1 0 0 0 ? 1 + 0 0 0,0 1 0 0 1 1 +x* 0 0 0,0 0 1 1 1 0 2 0 0 0,0 0 0 0 1 1 1 0 0 1 0 ? 0 0,1 0 + 0 0 0,1 0 0 1 1 0 +2x* 0 0 0,1 0 2 0 0 0,0 0 1 0 1 0 0 1 1?1 0 0 1 0 0 0 1 0 0, +0 结果同一位乘, x·y= 0,001 010 011 001

补码一位乘:部分积 乘数[y]补 yn+1 0 0,0 0 0 0 0 0 0,1 0 0 0 1 1 0 + 1 1,1 0 1 1 0 1 1 1 1,1 1 0 1 1? +[-x]补 1 1,1 0 1 1 0 1 1 1 1,1 1 1 0 1 1 0 1 ?0 1 0,1 0 0 0 1 1 —— +0 0,1 0 0 0 1 + 0 0,0 1 0 0 1 1 +[x]补 1 0 0,0 0 0 1 1 1 0 0 1 0, 1 0 0 ? 0 0,0 0 1 1 1 0 1 0?1 0 0,0 0 0 0 1 1 1 0 0 1 0,1 0 0 —— +0 ?0 —— +0 0,0 0 0 0 0 1 1 1 0 0 1 0,1 0 + 1 1,1 0 1 1 0 1 1 1 1,1 1 0 1 1? +[-x]补 1 1,1 0 1 1 1 0 1 0 1 1 0 0 1 0, 1 + 0 0,0 1 0 0 1 1 +[x]补 0 0,0 0 1 0 1 0 0 1 1 0 0 1 0 补码两位乘: 部分积 乘数 yn+1 0 0 0,0 0 0 0 0 0 0 0,1 0 0 0 1 1 0 + 1 1 1,1 0 1 1 0 1 2 1 1 1,1 1 1 0 1 1 0 1 0 0,1 0? +[-x]补 1 1 1,1 0 1 1 0 1 0 0 1 + 0 0 0,0 1 0 0 1 1 +[x]补 0 0 2 0 0 0,0 0 0 0 1 1 1 0?0,0 0 1 1 1 0 0 1 0 0,1 0 0 + 1 1 1,0 1 1 0 1 0 2 1 1 1,1?+[-2x]补 1 1 1,0 1 1 1 0 1 1 0 1 1 1 0 1 1 0 0 1 0 0,1 + 0 0 0,0 1 0 0 1 1 +0 0 0 0,0 0 1 0 1 0 0 1 1 0 0 1 0 0 结果同补码一位乘, x·y= 0, 001 010 011 001 00

(4) x= 0. 110 11, y= -0.111 01 x*= [x]原= [x]补= 0. 110 11 [y]原=1.111 01,y*=0. 111 01 [y]补=1.000 11 [-x*]补= [-x]补= 1.001 01 2x*= [2x]补= 01.101 10 [-2x*]补= 1=1 x*×y*=0.110 000 111 1? y0=0 ?[-2x]补= 10.010 10 x0=0,y0=1,z0=x0 [x×y]原=1.110 000 111 1 [x×y]补=1.001 111 000 10 x·y= -0. 110 000 111 1 运算过程如下:

原码一位乘:部分积 乘数y* 0 . 0 0 0 0 0 1 ?. 1 1 1 0 1 —— +x* + 0 . 1 1 0 1 1 0 . 1 1 0 1 1 1 0 . 0 0 1 1 0 1 1?0 . 0 1 1 0 1 1 . 1 1 1 0 —— +0 1 0 . 1 0 0?. 1 1 1 —— +x* + 0 . 1 1 0 1 1 1 . 0 0 0 0 1 0 0 1 1 1 . 1 1 —— +x* + 0 . 1 1 0 1 1 1 . 0 1 0 1 1 0 . 1 0 1 0 1 1 1 1 1 . 1 —— +x* + 0 . 1 1 0 1 1 ?1 1 0 . 1 1 0 0 0 0 1 1 1 1 ? 1 . 1 0 0 0 0

原码两位乘: 部分积 乘数y* Cj 0 0 0 . 0 0 0 0 0 0 . 1 1 1 0 1 0 + 0 0 0 . 1 1 0 1 1 +x* 2 0 0 0 . 0 0 1 1? 0 0 0 . 1 1 0 1 1 0 0 1 1 0 . 1 1 1 + 1 1 1 . 0 0 1 0 1 +[-x*]补 2 1 1 1 . 1 1 0 1? 1 1 1 . 0 1 0 1 1 1 0 1 1 1 1 . 0 1 + 0 0 1 . 1 0 1 1 0 +2x* 1 0 0 0 . 1 1 0 0 0? 0 0 1 . 1 0 0 0 0 0 0 1 1 1 1 0 . +0 结果同一位乘, x·y= -0. 110 000 111 1

补码一位乘: 部分积 乘数[y]补 yn+1 0 0 . 0 0 0 0 0 1 . 0 0 0 1 1 0 + 1 1 . 1 1 1 . 1 0?0 0 1 0 1 +[-x]补 1 1 . 0 0 1 0 1 1 1 1 . 1 1 0 0 1 0 ?0 1 0 1 1 . 0 0 0 1 1 —— +0 1 1 . 0 0 0 1 + 0 0 . 1 1 0 1 1 +[x]补 1 0 0 . 0 1 0 1 0 0 0 1 1 . 0 0 0? 0 0 . 1 0 1 0 0 1 0 0 .?1 0 0 . 0 0 1 0 1 0 0 0 1 1 . 0 0 —— +0 ?—— +0 0 0 0 1 0 1 0 0 0 1 1 . 0 + 1 1 . 0 0 1 0 1 +[-x]补 1 1 . 0 0 1 1 1 1 0 0 0 1 0 —— 清0

补码两位乘: 部分积 乘数 yn+1 0 0 0 . 0 0 0 0 0 1 . 0 0 0 1 1 0 + 1 1 1 . 0 0 1 0 1 2 1 1 1 . 1 1 0 0 1 0 ? +[-x]补 1 1 1 . 0 0 1 0 1 1 1 . 0 0 0 1 + 0 0 0 . 1 1 0 1 1 +[x]补 2 0 0 0 . 0 0 1 0? 0 0 0 . 1 0 1 0 0 1 0 0 0 1 1 . 0 0 + 1 1 0 . 0 1 0 1 0 1 1? +[-2x]补 1 1 0 . 0 1 1 1 1 1 1 . 0 0 1 1 1 1 0 0 0 1 0 . —— 清0 结果同补码一位乘, x·y= -0. 110 000 111 10

21. 用原码加减交替法和补码加减交替法计算x÷y。 (1)x=0.100111,y=0.101011; (2)x=-0.10101, y=0.11011; (3)x=0.10100, y= -0.10001; (4)x=13/32, y= -27/32。 解: (1)x*=[x]原=[x]补=x= 0.100 111 y*=[y]原=[y]补=y= 0=0 ?y0=0 ?0.101 011 [-y*]补=[-y]补=1.010 101 q0=x0 y]原=0.111 010 r*=0.000 010×2-6=0.000 000 000 010 ?y*=[x?y=x*?x 计算过程如下:

原码加减交替除法: 被除数(余数) 商 0 . 1 0 0 1 1 1 0 . 0 0 0 0 0 0 + 1 . 0 1 0 1 0 1 试减,+[-y*]补 1 . 1 1 1 1 0 1 . 1 1 1 0 0 0 0 . + 0 . 1 0 1 0 1 1 ?0 1 r< 1 . 0 0 0 1 1 0 ?0,+y* 0 . 1 0 0 0 1 1 1 0.1 + 1 . 0 1 0 1 0 1 r>?0, +[-y*]补 0 . 0 1 1 0 1 1 1 0 . 1 1 0 1 1 0 0.1 1 + 1 . 0 1 0 1 0 1 r>0, +[-y*]补 0 . 0 0 1 0 1 1

0 .?续: 被除数(余数) 商 1 0 1 0 1 1 0 0 . 1 1 1 + 1 . 0 1 0 1 0 1 r>0, 1 . 0 1 0 1 1 0 0.1 1 1 0 ?+[-y*]补 1 . 1 0 1 0 1 1 1 + 0 . 1 0 1 0 1 1 r< 0 . 0 0?0,+y* 0 . 0 0 0 0 0 1 1 0 0 1 0 0.1 1 1 0 1 + 1 . 0 1 0 1 0 1 r>0, 0.1 1 1 0 1 0 + 0 . 1 0 1 0 1 1 ?+[-y*]补 1 . 0 1 0 1 1 1 1 r<0,+y*(恢复余数) 0 . 0 0 0 0