计算机组成原理--补码加减交替,做出来什么?

  在上篇博文中(点击查看),做而论道对 “补码加减交替做除法” 的例题,提出了一点疑问。
  大家都知道,计算机中只有 1 和 0,并没有小数点。 那么,用 1、0,只能组成二进制整数。 但是,在《计算机组成原理》教材中,却经常出现诸如-0.1010 这样的数字。 这么写,完全不符合计算机中的实际情况。因为这种类型的数字,在计算机中,根本就不存在。 
  也有的教材上写:小数点并不是小数点,只是符号位数值位的分隔符,小数点前面的 0 就代表正号。 那么,“-0”,岂不是就有两个符号了! 这就更荒诞了。
  虽然,用二进制整数可以代表人类所用的整数、小数以及浮点数,同样还有英文汉字声音图像温度压力酸碱度 ... 等等。 但是,在讲解计算机内部的计算过程时,还是应该用计算机本身的数字来说明各种问题。

  计算机专家故意不用二进制整数,偏爱用二进制小数来说明这个事那个事,恐怕是为了掩盖某些他们说不清楚的问题。

  还是再看看上篇博文中的插图吧,如下所示。

  这张图片是某个著名考研辅导材料的视频截图,估计大家都是看过的。
  图中所给定的条件是:
X = +0.1000,Y = -0.1011。
  图中的要求是,求两个小数的相除结果:
  
   X / Y = (+0.1000) / (-0.1011),
  其实,这算式,完全可以化为整数相除:
  
   X / Y = (+1000) / (-1011)。
  这一步转换,只不过是把分子分母同时乘以 16,即可令小数点都右移了 4 位而已。
  这么简单的整数形式,计算机老师为什么不这么写呢?
  也许,他们不屑于用简单的形式吧。 故弄玄虚,是不是可以显得酷一些?

  另外,大家都知道,被除数的位数,应该大于除数的位数,如果是除数位数的二倍,就比较理想了。 看来,这个问题,也被计算机老师忽略了,所以,图片中所给出的 X、Y 的位数,是相同的。 用相同位数的两个数做除法,就比较难办了。
  为了弥补被除数位数的不足,他们就在计算过程中,在右边偷偷的
添上了 4 个零
  但是,即使是零,也不是可以随便添的。
  添上了,它就要参加除法运算的。
  因此,实际上的被除数,就是:+1000
0000 了。 其十进制就是:+128
  这个做法,就相当于把 X 的小数点右移了四位。
  而除数,没有变动,依旧是:-1011。 其十进制还是:-11
  那么,由此再算出的商和余数,也都应该在原来的基础上,把小数点右移四位。
  由图可知,商数(Q) 的补码是 1.0101,右移 4 位即为:10101。
       余数(R) 的补码是 0.0111,右移 4 位即为:00111。

  由此可以导出,X / Y 的商数:Q =-1011  =-11 (十进制)。
         X / Y 的余数:R = +111  = +7 (十进制)。

  最后,可得出: X / Y = Q + R / Y  =-1011 - 0111 / 1011。
  (另外说一句:图片给出的答案,其写法是错误的。)
  换算到十进制,就是:X / Y = 128 / (-11 ) =-11 - 7 / 11
      也可以写成:
X / Y = 128 / (-11 ) =-11,余 7

  验算,大家都会的,此处不再赘述。


  上图中的原始数据和最终的计算结果,其对应的关系,是完全正确的。
  为了验证这个算法正确,做而论道又用另外的数据如法炮制,也希望得到正确的结果,但是 ... 。 先看看下图吧。

  这是用二进制计算:128 ÷ 10 = 12,余 8,应该没错的吧?
  采用补码加减交替法做除法,全部计算过程,如下所示。

  图中的计算过程,是按照前面图片给出的方法做下来的。 做而论道觉得,好像也没有弄错。 大家也可以帮个忙,仔细看看有什么遗漏。

  按照图片上的运算结果,可得出:
  
   128 /  (-10) =-13,余-2。
  用公式来验算,这结果也是没错的。

  但是,正确的运算结果,不应该是【商-12,余 8】
  本方法怎么会算出来 “
商-13,余-2” 呢?

  做而论道还实验了另外几组数字,得出的结果,就不忍直视了。 
  验算,都没有问题。 但是,它们就是不符合除法运算的常规。
  只有一组还不错,就是前面图片中,老师拿来做例题用的。

  按此来说,用补码加减交错做除法,其正确性,还有待考证。

--本文完--

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值