补码除法,主要需要解决三个问题:1.确定上商;2.新余数形成方式;3.确定商符
其实,上商与新余数的形成是统一的,要确,上商0还是1,就是要比较被除数和除数绝对值的大小。当被除数的绝对值大于除数的绝对值,那么,在被除数和除数同号的情况下,商为正。这样,商的补码与原码应该是相同的,所以在够减的情况下,商上1,而在被除数和除数异号的情况下,商为负。这样,商的补码与原码,在从低位往高位看,找到第一个1时,在1和1的右边部分,与原码相同,在1的左边,与原码相反,但此时,商并没有确定,所以不好确定此刻的上商在1的左边还是右边,因此,约定商的最末位采用恒置1的方式上商,这样,商的最末尾为1,那么现在上的每一位商都在1的左边,也就是商的补码与原码是相反的。所以,在够减的情况下,补码上0,不够减上1。所以,上商规则是被除数与除数同号,够减上1,不够减上0,在被除数与除数异号的情况下,够减上0,不够减上1.下面我们来归纳被除数与除数够减与不够减的情况:
够减<=>|被除数|>|除数|(a表示被除数,b表示除数)
下面分a,b分别为正,为负四种情况讨论:
(1)a>0,b>0,则|a|>|b|<=>a>b<=>a-b>0
结论:a-b与b同号,够减。
(2)a<0,b<0,则|a|>|b|<=>-a>-b<=>a-b<0
结论:a-b与b同号,够减。
即在a,b同号的情况下,当a-b与b同号,够减,当a-b与b异号时,不够减。
(3)a<0,b>0,则|a|>|b|<=>-a>b<=>a+b<0
结论:a+b与b异号,够减。
(4)a>0,b<0,则|a|>|b|<=>a>-b<=>a+b>0
结论:a+b与b异号,够减。
即在a,b异号的情况下,当a+b与b异号,够减,当a+b与b同号时,不够减。
再结合上面上商规则,则有下面结论:
当a,b同号时,当a-b与b同号,上商1
当a,b同号时,当a-b与b异号,上商0
当a,b异号时,当a+b与b异号,上商0
当a,b异号时,当a+b与b同号,上商1。
下面分上述四种情况来讨论新余数的形成方法:
(1)a,b同号,a-b与b同号,上商1
因为这种情况够减,所以新余数为上一次余数左移一位,再减去b,即2Ri-b(Ri为上次余数)
(2)a,b同号,a-b与b异号,上商0
因为这种情况不够减,所以要恢复余数,而原来余数是由Ri-b得到的,所以恢复时,应该是Ri+b,再左移一位,即2*(Ri+b),再因为恢复余数后,余数与除数同号,所以,通过减法比较大小,即2*(Ri+b)-b=2*Ri+b
(3)a,b异号,a+b与b异号,上商0
因为这种情况够减,所以新余数为上一次余数左移一位,而a,b异号,所以新余数与除数相加比较绝对值大小,即2Ri+b
(4)a,b异号,a+b与b同号,上商1。
因为这种情况不够减,所以要恢复余数,而原来余数是由Ri+b得到的,所以恢复时,应该是Ri-b,再左移一位,即2*(Ri-b),再因为恢复余数后,余数与除数异号,所以,通过加法比较大小,即2*(Ri-b)+b=2*Ri-b。
最后,将上商情况与新余数形成方法总结,结论如下:
商上1,则新余数为2*Ri-b
商上0,则新余数为2*Ri+b