除法,上过小学的人,就都是学过的。
什么是除法,好像是应该这么说:
已知两个因数的乘积和一个因数,求另一个因数的运算,就是除法。
其实,从基本概念来说,除法,是一个连减的简便运算。
除法的本质是:
从一个数 X 中,连续减去同一个数 Y,直到不够减为止。
减去的次数,称为商 Q。
剩下的不够减的数,则称为余数 R。
而 X 就称为被除数、Y 则称为除数。
也就是:从被除数 X 中,减去 Q 次 Y,还剩下了 R。
因此,余数 R 的符号,必然是和被除数 X 的符号相同。
这几个参数的关系式是:
X = Q × Y + R;
Y = ( X-R ) ÷ Q;
Q = ( X-R ) ÷ Y;
R = X-Q × Y。
按照连减的说法,128 ÷ 10,应该是多少呢?
从 128 中减去 10,可以减 12 次,到了不够减的时候,就剩下 8 了。
所以有:128 ÷ 10 = 12,余 8。
但是,有人会想,减顺手了,再继续减一次吧。
那就减吧!
那么,此时的商,就是 13 了,余数 8-10,就是-2 了。
此时,这些人就会说:128 ÷ 10 = 13,余-2 !
但是,这种算法和结果,还算是除法吗?
显然,你多减了一次,当然就不是除法运算了。
但是,在计算机专业教材中的 “除法运算”,他们就是这样算的!
详细的运算过程,可见做而论道上次写的博文(查看)。
还有另外的例子。 话不多说,先上图。
这张图的原型仍然是某个著名考研辅导材料中视频截图。
做而论道在图中改动了一个参数:Y =-0.1100。 在图中以红圈做出了标记。
参数 X = +0.1000,并没有改动。
图中例题的要求是:求 X / Y。
代入数值,即有:X / Y = 0.1000 / (-0.1100) = -1000 / 1100。
但是,在图中的相除过程中,对 X 左移了 4 次,后面又添上了 4 个 0。 因此,实际上的被除数就不是原来的 X 了。 实际做的除法是: 1000 0000 / 1100 = 128 / 12 (十进制)。
这个除法运算,大家都可以看出结果:商 = -10,余数 = +8。
按照补码加减交错来做除法,全部过程,做而论道都写在上面的图片上了。 大家可以仔细看看,是不是和视频截图的步骤方法相同?
在图中,商的补码是 1.0101,余数的补码是 1.1100。
由于在运算过程中,X 后面添上了 4 个 0,相当于被除数 X 的小数点右移了 4 位。 因此,在图中算出的商、余数,也应该相应的,把小数点右移 4 位。
那么,商的补码,就是 10101。 换算出商的真值,就是-1011 = -11 (十进制)。
同样,余数的补码,则是 11100。 故此,余数就是-0100 = -4 (十进制)。
这个运算结果,和前面人工计算的结果,是不同的。
毛病出在什么地方,做而论道还看不出来。
下面这张图,还是同样的算法,只是又换了一个数据。
被除数 X 在运算过程中,右边添了 4 个 0。即为:X = 1000 0000 = 128 (十进制)。
除数 Y 做了改动,这次的数值是:Y = -1001 = -9 (十进制)。
那么,除法的正常结果就应该是:Q =-14,R = +2。
但是,按照图片上的方法步骤,算出的结果却是:Q = -15,R = -7。
类似的数据错误,还有一些,就不多列出了。
大家也可以自己找几个数据试试看。
如此来看,不像是简单的数据错误,也不是误差问题。
而貌似是 “补码加减交错做除法”,这个方法是错误的。
做而论道实验过:如果不用补码,只用加减交错,还是可以的。
这就等下次再说吧。
--本文完--
今天的文章 计算机组成原理--先搞清楚什么是除法分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/104396.html