Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

减法器

复习

  • 加法器已经能把多位二进制数相加
  • 补码让负数可以直接进入普通加法器
  • 一个数按位取反再加 1,就能得到它的相反数

TL;DR

  • A - B 就是 A + (-B)
  • 让 B 按位取反,并把最低位进位设为 1,加法器就能完成减法
  • 加法和减法可以共用同一套电路

正文

  我们已经绕了两章的远路,终于可以回来回答最初的问题:加法器能不能做减法?

  拿 5 - 2 来说。上一章已经告诉我们,4 位补码里的 -21110,所以:

  0101   (+5)
+ 1110   (-2)
------
1 0011

  4 位机器只保留低 4 位,结果是 0011,也就是 3。原来的加法器一根线都不用改,减法已经算出来了。

把“取反加一”也交给电路

  不过,现在仍然要由人先把 2 改写成 -2。机器应该自己做这件事。

  给电路增加一根控制线,叫作 SUB

  • SUB = 0:做加法,B 原样进入加法器,最低位进位也是 0
  • SUB = 1:做减法,B 的每一位取反,最低位进位设为 1

  异或门正好能充当“受控制的取反器”:

B XOR 0 = B
B XOR 1 = NOT B

  于是,送进加法器的其实是:

A + (B XOR SUB) + SUB

  当 SUB = 0 时,它就是 A + B;当 SUB = 1 时,它就是 A + NOT B + 1,也就是 A - B

  一根控制线,让同一台机器学会了两种运算。这比另外造一整套减法电路省事得多。

把运算装进一个盒子

  我们不再另造一套减法电路,而是复用加法器。前面花力气理解补码,回报就在这里。

  现在,机器会加,也会减。更早以前造出的与门、或门等电路还能完成逻辑运算,但它们仍然散落在桌面上。每换一种运算就重新接线,显然不够像一台真正的计算机。

  下一章,我们把常用运算装进同一个盒子,再用控制信号决定这一次要算什么。

思考题

  在 4 位电路中,若 A = 0110B = 0011,做减法时真正送进加法器的第二个数和最低位进位分别是什么?结果是多少?

小结

知识点

  • 减法可以转化为补码加法
  • 异或门可以受控制地决定是否取反
  • 加减法器的统一表达式是 A + (B XOR SUB) + SUB

思考题答案(仅供参考)

  SUB = 1,所以 B 先按位取反为 1100,最低位进位为 1。加法器计算 0110 + 1100 + 1 = 1 0011,丢掉最高位后得到 0011,即 3。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪