计算机组成原理--先搞清楚什么是除法

计算机组成原理--先搞清楚什么是除法做除法 除不尽时 就会有余数 R

  除法,上过小学的人,就都是学过的。 
  什么是除法,好像是应该这么说:
   已知两个因数的乘积和一个因数,求另一个因数的运算,就是除法。
  
其实,从基本概念来说,除法,是一个连减的简便运算。
  除法的本质是:
   从一个数 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。

  类似的数据错误,还有一些,就不多列出了。 
  大家也可以自己找几个数据试试看。 

  如此来看,不像是简单的数据错误,也不是误差问题。 
  而貌似是 “补码加减交错做除法”,这个方法是错误的。 
  做而论道实验过:如果不用补码,只用加减交错,还是可以的。 
  这就等下次再说吧。 

 

--本文完--

今天的文章 计算机组成原理--先搞清楚什么是除法分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-07 12:30
下一篇 2025-01-07 12:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/104396.html