“布斯公式”: 在乘数Yn后添加Yn+1=0.按照Yn+1 ,Yn相邻两位的三种情况,其运算规则如下: (1) Yn+1 ,Yn =0( Yn+1 Yn =00或11),部分积加0,右移1位; (2) Yn+1 ,Yn =1( Yn+1 Yn =10) ,部分积加[X]补,右移1位;
(3) Yn+1 ,Yn =-1( Yn+1 Yn =01) ,部分积加[-X]补,右移1位 最后一步不移位. (2)两位乘法
<1>原码两位乘法,因此实际操作用Yi-1,Yi,C三位来控制,运算规则如下 Yi-1 Yi C 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 操作 +0, 右移2位 0→C +X, 右移2位 0→C +X, 右移2位 0→C +2X, 右移2位 0→C +2X, 右移2位 0→C -X, 右移2位 1→C -X, 右移2位 1→C +0, 右移2位 1→C
<2>补码两位乘法
根据前述的布斯算法,将两步合并成一步,即可推导出补码两位乘的公式. Yn-i-1 Yn-i Yn-i+1 [Pi+2]补 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 +0, 右移2位 +[X]补, 右移2位 +[X]补, 右移2位 +2[X]补, 右移2位 -2[X]补, 右移2位 -[X]补, 右移2位 -[X]补, 右移2位 +0, 右移2位 求部分积的次数和右移操作的控制问题. 当乘数由1位符号位和以n(奇数)位数据位组成时,求部分积的次数为(1+n)/2,而且最后一次的右移操作只右移一位.
若数值位本身为偶数n,可采用下述两种方法之一:
①可在乘数的最后一位补一个0,乘数的数据位就成为奇数,而且其值不变,求部分积的次数为1+(n+l)/2,即n/2+1,最后一次右移操作也只右移一位.
②乘数增加一位符号位,使总位数仍为偶数,此时求部分积的次数为n/2+1,而且最后一次不再执行右移操作.
(3)补码除法 笔算除法和机器除法的比较 笔算除法 机器除法 商符单独处理 符号位异或形成 心算上商 余数 不动 低位补“0” 余数 左移一位 低位补“0” 减右移一位 的除数 减 除数 2 倍字长加法器 1 倍字长加法器 上商位置 不固定 在寄存器 最末位上商 <1>定点原码一位除法 1>恢复余数法
被除数(余数)减去除数,如果为0或者为正值时,上商为1,不恢复余数;如果结果为负,上商为0,再将除数加到余数中,恢复余数.余数左移1位.
2>加减交替法
当余数为正时,商上1,求下一位商的办法,余数左移一位,再减去除数;当余数为负时,商上0,求下一位商的办法,余数左移一位,再加上除数. <2>定点补码一位除法(加减交替法)
1〉如果被除数与除数同号,用被除数减去除数;若两数异号,被除数加上除数.如果所得余数与除数同号商上1,否则,商上0,该商为结果的符号位.
2〉求商的数值部分.如果上次商上1,将除数左移一位后减去除数;如果上次商上0,将余数左移一位后加除数.然后判断本次操作后的余数,如果余数与除数同号商上1,如果余数与除数异号商上0.如此重复执行n-1次(设数值部分n位).
3〉商的最后一位一般采用恒置1的办法,并省略了最低+1的操作.此时最大的误差为2-n.
5)溢出概念和判别方法
当运算结果超出机器数所能表示的范围时,称为溢出.显然,两个异号数相加或两个同号数相减,其结果是不会溢出的.仅当两个同号数相加或者两个异号数相减时,才有可能发溢出的情况,一旦溢出,运算结果就不正确了,因此必须将溢出的情况检查出来.判别方法有三种:
1〉当符号相同的两数相加时,如果结果的符号与加数(或被加数)不相同,则为溢出.
2〉当任意符号两数相加时,如果C=Cf,运算结果正确,其中C为数值最高位的进位,Cf为符号位的进位.如果C≠Cf ,则为溢出,所以溢出条件=C⊕Cf .
3〉采用双符号fs2fs1.正数的双符号位为00,负数的双符号位为11.符号位参与运算,当结果的两个符号位甲和乙不相同时,为溢出.所以溢出条件= fs2⊕fs1 ,或者溢出条件= fs2fs1 + fs2fs1
(三) 浮点数的表示和运算 1. 浮点数的表示
1)浮点数的表示范围;
浮点数是指小数点位置可浮动的数据,通常以下式表示: N=M×RE
其中,N为浮点数,M(Mantissa)为尾数(可正可负),E(Exponent)为阶码(可正可负),R(Radix)称为“阶的基数(底)”,而且R为一常数,一般为2,8或16.在一台计算机中,所有数据的R都是相同的,于是不需要在每个数据中表示出来.因此,浮点数的机内表示一般采用以下形式:
浮点数的机内表示一般采用以下形式: Ms E M 1位 n+1位 m位 Ms是尾数的符号位,设置在最高位上.
E为阶码(移码),有n+1位,一般为整数,其中有一位符号位,设置在E的最高位上,用来表正阶或负阶.
M为尾数(原码),有m位,由Ms和M组成一个定点小数.Ms=0,表示正号,Ms=1,表示负.为了保证数据精度属数通常用规格化形式表示:当R=2,且尾数值不为0时,其绝对值大于或等于(0.5)10.对非规格化浮点数,通过将尾数左移或右移,并修改阶码值使之满足规格化要求.
浮点数的表示范围以通式N=M×RE设浮点数阶码的数值位取m位,尾数的数值位取n位
2)IEEE754标准(Institute of Electrical and Electronics Engineers美国电气和电子工程协会)