在进行除法运算时,也就是多次进行:移位、相减、移位、相减 ... 。
移位,可以是 “被除数左移”,也可以是 “除数右移”。
相减,大家都会做。
人工做减法时,如果够减则减,商上 1;如果不够减就不减,商则上 0。
由计算机计算时,当然就得先减一遍了,减完之后才能发现够减不够减。
在不够减时产生的差(计算机专业称之为余数),显然是不能用的。
所以,计算机专家就想出来 “恢复余数” 的补救方法。
计算机专家的想法是:先保存这个不够减的余数,再将其加上除数,恢复到原来的被除数之后,再进行移位。
这两种除法的竖式,列出如下。
其实,人工做除法的算法,在计算机中,也是可以实现的。
虽然,计算机做不到 “不够减就不减”。
但是,计算机可以做到【不够减就不保存差(即余数)】。
就是说:当发现不够减时,这个余数,就不保存了。接着就用原来的被除数左移即可!
做而论道在前面的博文中,已经给出了两种电路,都可以按照人工算法来完成除法运算。 两个电路的简图如下所示。
左图,是采用循环方式完成除法的电路,其工作原理可见点击查看。
右图是采用减法器阵列完成除法的电路,其工作原理可见点击查看。
上述两图所用到的二进制的位数都不多,所以,只能作为参考之用。 按照上面两图的思路,做而论道还分别设计了两种 16 位数除以 8 位数的电路,这就有点接近实用了。 经过仿真运行,这两种电路都能圆满的完成无符号数除法运算。运算结果,百分之百都是正确的。
上述两图的设计思路,都是符合 “人工做除法” 的方法与步骤的。 这个思路并不难,也可以说是极其简单,设计集成电路的技术员,也一定会掌握的。 那么,他们就可以轻而易举的,在 CPU 中,设计出同类的电路。
因此,就可以说,在计算机中,根本就不会出现 “不够减的余数”。 那么,计算机专家所编造的 “恢复余数法、不恢复余数法”,这不就是白忙活了吗! 所谓的 “加减交错法”,也是白费心思了。 的的确确,这种余数,根本就不会存在,由此编造的各种理论与方法,根本就没有立足之地!
除了这种荒谬的 “恢复余数” 说法之外,计算机教材中,还有一些不当之处,值得说说。
大家都知道,计算机中只有 1 和 0,并没有小数点。 用 1 和 0,只能组成二进制的整数。 因此,计算机中的各种计算,都只能是针对整数进行。 各种运算结果,也百分之百都是整数。
当然,用这些二进制整数,可以代表:整数、小数、甚至浮点数。
再扩展一下:英文汉字声音图像各种外设的控制信号各种外设的状态信息 ... 。 这些,也都是可以用二进制数代表的。
虽然,可以说是包罗万象了,但是,在计算机内部的各种运算,必须,也只能是对二进制整数进行操作。
说到这里,就发现一些奇怪的事了:计算机教材中,许多运算,都写上了小数点!
他们写的这种数字,在计算机中,显然都是不存在的。
那么,计算机专业的教材,为什么不按照计算机的特点来教学?
难道,他们写的这些,不是讲我们现在用的计算机?
脱离实际,这课本,就没什么看头了。
另外还有一个问题。
做除法 ( X / Y ) 时,被除数 X 的位数,最好是除数 Y 的二倍。 这样才能得到合适位数的商。
但是,在许多计算机教材的除法例题中,被除数、除数,两者的位数,竟然都是相同的!
然后,在相除的过程中,又在被除数后面,无根无据的添上几个零!
然后,又毫无理由的说,添零的个数,与除数的位数相同,即可。
既然可以添零,你就应该继续添啊,为什么就不添了?
关键问题是:添上几个零之后,被除数,显然就不是题目中原来给定的数值 X 了,而是 X0000 了。 由此求出的商和余数,也就不知道是什么东西了!
可以肯定的说:计算机教材中的例题,所求得的商 Q,并不是【X / Y】!
而是:【X0000 / Y】。
另外,还有一个问题。
计算机教材所讲的乘除运算,都是针对原码或补码进行的。
由此,只能设计出来【带符号数】乘法器或除法器的电路。
这种电路,能不能对【无符号数】进行同样位数的乘除运算呢?
实际上,这是做不到的。
为什么做不到?
还是等介绍完了乘法电路再说吧。
--本文完--