一般性的加法过程

现在来考察一下一般性的加法过程, 因为我们更为熟悉十进制, 这里就用十进制来讨论, 但这些原理同样适用于二进制.

无进位做加法的过程

从一般的情况出发, 比如怎么计算 24+35 呢? 有三步

  1. 把个位与个位相加, 4+5=9;
  2. 再把十位与十位相加, 2+3=5;
  3. 再合起来得到 59.

自然, 这是没有进位的情况, 一切都没有问题, 如果我们有十进制的一位加法器原型, 那么用两个并列就能完成这个过程了:

无进位加法器示例

有进位做加法的过程

但事情往往不会那么简单, 现在再考虑另一组加法: 256+128. 通过组合三个一位数加法器, 分别处理个位, 十位与百位数字的相加, 结果如下:

加法器进位问题

显然, 3714 不是我们想要的结果, 因为没有考虑到进位的影响, 正确的结果应该是 384.

所以现在需要修正一位加法器的原型:

  1. 首先至少要两个输出, 一个是 加位(sum,S) 的输出, 一个 进位(carry,C) 的输出, 这点我们在前面就已经明确过:

    改进的带加位和进位的加法器

  2. 其次, 进位 的输出还要参与到下一级的输入中去, 也即要有 三个 输入, 输出则只要显示 加位 的结果即可:

    带进位的加法器示例

    对于右边最低位, 不存在进位, 使用一个接地符号表示输入为 0;

    其余的进位输入则来自低位的进位输出;

    图中红色的线表示产生了进位: 对于中间的十位数加法, 实际是 5+2+1=8.

经过这样的调整, 多位加法器就能正常工作了, 但这样一来, 模型也复杂多了.

results matching ""

    No results matching ""