可以用通俗的方法理解加减交替法,假设现在有两个无符号数15除以3,他们的二进制分别是1111和11。先把11B左移两位得到1100(左移的位数由被除数和除数的有效位数差决定),[这个思路在正常的十进制除法也是一样的,400/2 的时候,我们是不是可以把2左移两位,变成 (400/200 )*100=2*100=200 ]
。从而得到1111-1100=0011 是正数,并不需要借位,也就是说现在在第2位(从0位数)可以上1,因为除数左移了两位,所以如果把除数看回原来的数字,就等于把商左移了两位。
下面等价中提到的“10”是用的十进制的基本单位,因为这样比较符合人的常识
被除数/(除数*10)=商 和 被除数/(除数)=商*10显然是等价的。于是现在得到一个部分商是1xx。接下来被除数是0011了,现在要做一个左移,为什么要这样呢,因为被除数*10/除数=商 和 被除数 /除数 =商/10 也显然是等价的。 我们刚刚的商上在了第2位,在不改变除数的情况下,如果想要让商能上在第1位,可以改变被除数的大小。当然你也可以发现,如果除数再右移一位,也就是在找这样一条等价式子 被除数 /除数 =商/10 等价于 被除数/(除数/10)=商 。也是可行的,在计算机实现过程中我们习惯左移被除数,因为右移有可能会丢失低位造成精度损失,也就是选择了前面的左移被除数做法。所以现在我们得到了被除数110和除数1100,做减法,是负数,需要借位,得到了一个1010。我们根据借位知道这位商是0,因为减不动。现在要继续算下一位了,但是很明显我们发现第三位有个1,这不可能是我们在第0位能解决的。这是因为借位产生了影响。换过头想想 10000+被除数-除数=目前这个不正确的被除数 。如果我们把等式的位置稍微做一下移动,也就是把等式改成 10000+被除数=目前不正确的被除数+除数,因为位数显示,10000会被直接扔掉,等于在这一位上我们没有修改被除数,因为我们上的是0,所以这也是我们希望产生的结果。到此得到了被除数110和除数1100和部分商10x ,最后一位,我们继续左移被除数,得到1100他和除数完美匹配,可以上1,所以商出来了,是101,余数是0.
完美的验证了我们15/3=5的需要