计算机组成原理--求相反的数

  什么是 “相反的数”?
  在小学都学过:绝对值相等、符号相反的两个数,就是互相相反的数。
  已知一个数 X,怎么求 X 的相反数呢?
  在前面加个负号(-),得到一个-X,这就是 X 的相反数了。
  小学的知识点,不难吧? 到了计算机里面,可就不这么简单了。

  在计算机系统中,正负数值,一律采用补码表示和存储。
  正数的补码、负数的补码,相差的,可就不仅仅是一个符号了。
  下面就是正负数值与其八位补码的对照表。

   ----------+------------
  十进制数 | 二进制补码
   ----------+------------
    + 127  | 0111 1111
    + 126  | 0111 1110
    + 125  | 0111 1101
    + 124  | 0111 1100
      . ...  | .... ....
    +  3   | 0000 0011
    +  2   | 0000 0010
    +  1   | 0000 0001
       0   | 0000 0000
    -  1   | 1111 1111
    -  2   | 1111 1110
    -  3   | 1111 1101
      . ...  | .... ....
    - 125  | 1000 0011
    - 126  | 1000 0010
    - 127  | 1000 0001
    - 128  | 1000 0000
   ----------+------------

  由表中数据可以看出,正数的补码负数的补码,相差的不仅仅是最高位的符号位了,而是相差了几乎全部的八位数。 由此可知,最高位就是符号位的说法,是有错误的。 应该说,全部的八位数,都与符号有关,也可以说,补码的全部位,都是符号位。

  计算机教材上的说法是:利用求补运算,就可以把正数的补码,变换成负数的补码,并且,也能把负数的补码,变换成正数的补码
  
所谓的求补运算,就是:连同最高位一起,全部都取反加一。
  如果用门电路来实现求补运算,是很麻烦的。 转换八位数时,就必须使用八个非门来取反,还得再用一个八位的加法器来做八位数加一。 这就太麻烦了!

  其实,就不用费那么多闲心了,利用小学的知识,就能解决这个问题。

  由等式:X-X = 0,就可以推出:-X = 0-X。
  再把式中各项,都转换成补码,即有:[-X ]补 = [ 0 ]补-[ X ]补。
  对于八位机来说,式中的 [ 0 ]补,应该就是八个 0。
  那么,上式即为:[-X ]补 = 0000 0000-[ X ]补。 用八位的减法电路就能完成这个转换。

  在上篇博文实用的减法器中,做而论道给出了一个减法电路,可实现:F = A-B-CN。
  针对本次需求,只要把 A 和 CN 都定为 0,正负数的互相转换,不就可以完成了吗?
  下图就是正负数转换的电路。电路中的 A7~0 和 CN 已经都接到低电平了。
  待转换的是 B7~0 = 0000 0001,这就是 +1 的补码。
  两片 ALU 做的是八位减法运算,计算结果 F7~0 = 1111 1111,这正是-1 的补码。

  再换一个数字:B7~0 = 0101 1010 = 90,转换一下试试看,结果如下图所示。

  可看到,转换结果 F7~0 = 1010 0110,这正是-90 的补码。 转换正确。

  上面两次转换,都是:由正数的补码转换到了负数的补码,这两个补码的(十进制)绝对值,是相同的。所以,转换之前和之后的两个数值,确实是相反的数。

  反过来转换,是否正确呢? 请看下面的两个截图。

  上图是把-1 的补码 1111 1111,转换成了 +1 的补码 0000 0001。

  上图则是把-90 的补码 1010 0110,转换成了 +90 的补码 0101 1010。

  本博文,介绍了减法电路的一个应用:求相反的数。
  在计算机领域,则应该说:
求相反的数的补码。也就是计算机专家所说的:求补

  通过本博文的介绍,应该对求补运算,有更深入的理解了。学到了更为简单的求补方法。 而且,利用减法来求补,是完全符合数学理论基础的。 至于 “取反加一”,是无法看出它有什么理论的!

  实际上,减法电路在计算机中的应用,还是很多的。
  但是,《计算机组成原理》忽略了 “减法器” 这个内容,反而总去讲用
取反加一再相加来代替减法运算。讲的既麻烦又落后,真不知道这些个专家和老师都是怎么想的!
  这么简单又先进(总比取反加一稍稍先进一点吧)的知识,怎么就不给学生讲呢?

 

--本文完--

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值