用原码加减交替法和补码加减交替法计算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。
用原码加减交替法和补码加减交替法计算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*=[xy=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 00.+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 1 0 补码加减交替除法: 被除数(余数) 商 0 0 . 1 0 0 1 1 1 0 . 0 0 0 0 0 0 + 1 1 . 0 1 0 1 0 1 1 . 1 1 1 0 0 0 1 试减.x、y同号.+[-y]补 1 1 . 1 1 1 1 0 0 1 0 . + 0 0 . 1 0 1 0 1 1 r、y异号.+[y]补 0 0 0 1 . 0 0 0 1 1 0 0.1 + 1 1 . 0 1. 1 0 0 0 1 1 1 0 0 . 1 1 00 1 0 1 r、y同号. +[-y]补 0 0 . 0 1 1 0 1 1 1 1 1 0 0.1 1 + 1 1 . 0 1 0 1 0 1 r、y同号. +[-y]补 0 0 . 0 0 1 0 1 1 0 0 . 0 1 0 续: 被除数(余数) 商 1 1 1 0 0 . 1 1 1 + 1 1 . 0 1 0 1 0 1 r、y同号. +[-y]补 1 1 . 0 1 0 1 1 0 0.1 1 1 0 + 1 1 . 1 0 1 0 1 1 1 0 0 . 00 0 . 1 0 1 0 1 1 r、y异号.+[y]补 0 0 . 0 0 0 0 0 1 1 0 0 0 1 0 0.1 1 1 0 1 + 1 1 . 0 1 0 1 0 1 r、y同号. 0.1 1 1 0 1 1 —— 恒置1 + 0 0 . 1 0 1 +[-y]补 1 1 . 0 1 0 1 1 1 1 0 1 1 r、x异号.(恢复余数) 0 0 . 0 0 0 0 1 0 且r、y异号. +[y]补 y]补= 0.111 011 [r6]补=0.000 010.r=r*=0.000 000 000 010y=[x注:恒置1引入误差。 x (2)x= -0.101 01.y=0.110 11 [x]原=1.101 01 x*= 0.101 01 y* = [y]原 = [y]补= y = 0.110 11 [-y*]补= [-y]补= 1.001 01 [x]补= 1.010 11 yy]原=1.110 00 xy*= 0.110 00 [x 0 = 1 x* y0 = 1 q0 = x0 = -0.110 00 r*=0.110 00×2-5 =0.000 001 100 0 计算过程如下: 原码加减交替除法: 被除数(余数) 商 0 . 1 0 1 0 1 0 . 0 0 0 0 0 + 1 . 0 0 1 0 1 试减.+[-y*]补 1 . 1 1 0 1 0 1 1 . 1 0 1 0 0 0 . + 0 . 1 1 0 1 1 r< 0 . 1 1 1 1 0 0.1 0.+y* 0 . 0 1 1 1 1 1 + 1 . 0 0 1 0 1 r> 0 . 0 00. +[-y*]补 0 . 0 0 0 1 1 1 1 1 0 0.1 1 + 1 . 0 0 1 0 1 r>0. +[-y*]补 1 . 0 1 0 1 1 0 . 1 0 1 1 0 续: 被除数(余数) 商 1 0 . 1 1 0 + 0 . 1 1 0 1 1 r<0. +y* 1 . 1 0 0 0 1 . 0 0 0 1 0 0.1 1 0 0 + 0 . 1 1 0 1 1 1 1 r< 0.1 1 0 0 0 + 0 . 1 1 0 1 1 0.+y* 1 . 1 1 1 0 1 1 r<0. +y*(恢复余数) 0 . 1 1 0 0 0 补码加减交替除法: 被除数(余数) 商 1 1 . 0 1 0 1 1 0 . 0 0 0 0 0 + 0 0 . 1 1 0 1 1 0 0 . 0 1 1 0 0 试减.x、y异号.+[y]补 0 0 . 0 0 1 1 0 1 1 . + 1 1 . 0 0 1 0 1 r、y同号.+[-y]补 1 1 . 1 0 0 0 1 1 . 0 0 0 1 0 1.0 + 0 0 . 1 1 0 1 1 1 1 1 1 . 1 1 0 1 0 r、y异号. +[y]补 1 1 . 1 1 1 0 1 1 1.0 0 + 0 0 . 1 1 0 1 1 r、y异号. +[y]补 0 0 . 1 0 1 0 1 0 1 . 0 1 0 1 0 1 . 0 0 1续: 被除数(余数) 商 1 0 0 + 1 1 . 0 0 1 0 1 r、y同号. +[-y]补 0 0 . 0 1 1 1 1 1 . 1 1 1 1 0 1.0 0 1 1 + 1 1 . 0 0 1 0 1 1.0 0 1 1 1 —— 恒置1 + 1 1 . 0 0r、y同号.+[-y]补 0 0 . 0 0 0 1 1 1 1 0 1 r、x异号.(恢复余数) 1 1 . 0 1 0 0 0 且r、y同号.+[-y]补 y=y]补=1.001 11.x注:恒置1引入误差。 [r5]补=1.010 00. r= -0.000 001 100 0 [x -0.110 01 (3)x= 0.101 00.y= -0.100 01 x*= [x]原= [x]补= x=0.101 00 [y]原 = 1.100 01 y* = 0.100 01 [-y*]补=1.011 11 [y]补= 1.011 11 y*= 1.001 01 —— 溢出 1 = 1 x* y0 = 0 [-y]补= 0.100 01 q0 = x0 y = -1.001 01 r*=0.010 11×2-5 =0.000y]原:无定义 x [x 000 101 1 计算过程如下: 原码加减交替除法: 被除数(余数) 商 0 . 1 0 1 0 0 0 . 0 0 0 0 0 + 1 . 0 1 1 1 1 试减.+[-y*]补 0 . 0 0 0 . 0 0 1 1 0 10 1 1 1 . + 1 . 0 1 1 1 1 r>0. +[-y*]补 1 . 1 0 1 0 1 1 . 0 1 0 1 0 1.0 + 0 . 1 0 1 0 0 1 r< 1 . 1 0 1 1 0 0. +y* 1 . 1 1 0 1 1 1 1.0 0 + 0 . 1 0 0 0 1 r<0. +y* 0 . 0 0 1 1 1 0 . 0 1 1 1 0 1 . 0 0 1 续: 被除数(余数) 商 1 + 1 . 0 1 1 1 1 r> 1 . 1 10. +[-y*]补 1 . 1 1 1 0 1 1 0 1 0 1.0 0 1 0 + 0 . 1 0 0 0 1 r<0.+y* 1.0 0 1 0 1 r0 . 0 1 0 1 1 1>0. 结束 注:当x*>y*时产生溢出.这种情况在第一步运算后判断r的正负时就可发现。此时数值位占领小数点左边的1位.原码无定义.但算法本身仍可正常运行。 补码加减交替除法: 被除数(余数) 商 0 0 . 1 0 1 0 0 0 . 0 0 0 0 0 + 1 0 0 . 0 0 1 1 . 0 1 1 1 1 试减.x、y异号.+[y]补 0 0 . 0 0 0 1 1 1 1 0 0 . + 1 1 . 0 1 1 1 1 r、y异号.+[y]补 1 1 . 0 1 0 1 0 0.1 + 0 0 . 1 1 . 1 0 1 0 1 1 1 1 . 1 0 11 0 0 0 1 r、y同号. +[-y]补 1 1 . 1 1 0 1 1 1 1 0 0.1 1 + 0 0 . 1 0 0 0 1 r、y同号. +[-y]补 0 0 . 0 0 1 1 1 0 0 . 0 1 1 1 0 续: 被除数(余数) 商 1 0 . 1 1 0 + 1 1 . 0 1 1 1 1 r、y异号. +[y]补 1 1 . 1 1 . 1 1 0 1 0 0.1 1 0 1 + 0 0 . 1 0 0 01 1 1 0 1 1 0.1 1 0 1 1 —— 恒置1 1 r、y同号.+[-y]补 0 0 . 0 1 0 1 1 1 r、x同号.结束 [r5]补=0.010 11.r=r*=0.000 000 101 1 y= -1.001 01 判溢出:qf y]补=10.110 11.x 1 = 1 [x y0 = 0 真符位的产生:qf = x0 0 = 1.溢出q0 = 1 注:由于本题中x*>y*.有溢出。除法运算时一般在运算前判断是否x* >y*.如果该条件成立则停止运算.转溢出处理。但此算法本身在溢出情况下仍可正常运行.此时数值位占领小数点左边的1位.商需设双符号位(变形补码).以判溢出。采用这种方法时运算前可不判溢出.直接进行运算.运算完后再判溢出。 (4)x=13/32=(0.011 01)2 y= -27/32=(-0.110 11)2 x*= [x]原= [x]补= x=0. 011 01 [y]原 = 1.110 11 y* = 0.110 11 [-y*]补=1.001 01 [y]补= 1.001 01 y*= 0.011 11 1 = 1 x* y0 = 0 [-y]补= 0.110 11 q0 = x0 y =(-0.011 11)2 = -15/32 r*=0.010 11×2-5 y]原=1.011 11 x[x =0.000 000 101 1 原码加减交替除法: 被除数(余数) 商 0 . 0 1 1 0 1 0 . 0 0 0 0 0 + 1 . 0 0 1 0 1 试减.+[-y*]补 1 . 1 0 0 1 . 0 0 1 0 0 0 . 1 0 1 + 0 . 1 1 0 1 1 r<0. +y* 1 . 1 1 1 1 1 1 . 1 1 1 1 0 0.0 + 0 . 1 1 0 1 1 1 r< 1 . 1 0 0 1 0 0. +y* 0 . 1 1 0 0 1 1 0.0 1 + 1 . 0 0 1 0 1 r>0. +[-y*]补 0 . 1 0 1 1 1 1 . 0 1 1 1 0 0 . 0 1 1 续: 被除数(余数) 商 1 + 1 . 0 0 1 0 1 r> 1 . 0 00. +[-y*]补 0 . 1 0 0 1 1 1 1 1 0 0.0 1 1 1 + 1 . 0 0 1 0 1 r>0. +[-y*]补 0.0 1 1 1 1 r 0 . 0 1 0 1 1 1>0. 结束 补码加减交替除法: 被除数(余数) 商 0 0 . 0 1 1 0 1 0 . 0 0 0 0 0 + 1 1 . 0 0 1 0 1 试减.x、y异号.+[y]补 1 1 . 1 0 0 1 0 1 1 1 . 0 0 1 0 0 1 . + 0 0 . 1 1 0 1 1 1 1 . 1 1 1 1 0 r、y同号.+[-y]补 1 1 . 1 1 1 1 1 1 1.1 + 0 0 . 1 1 0 1 1 r、y同号.+[-y]补 0 0 . 1 1 0 0 1 0 1 . 1 0 0 1 0 1.1 0 + 1 1 . 0 0 1 0 1 1 r、y异号. +[y]补 0 0 . 1 0 1 1 1 0 1续: 被除数(余数) 商 1 . 0 1 1 1 0 1 . 1 0 0 + 1 1 . 0 0 1 0 1 r、y异号. 0 1 . 0 0 1 1 0 1.1 0 0 0 ++[y]补 0 0 . 1 0 0 1 1 1 1.1 0 1 1 . 0 0 1 0 1 r、y异号.+[y]补 0 0 . 0 1 0 1 1 1 0 0 1 —— 恒置1 r、x同号.结束 [r]补=0.010 y=(-0.011 11)2 = -15/32y]补=1.100 01.x11.r=r*=0.000 000 101 1 [x