【发布时间】:2016-12-08 04:55:35
【问题描述】:
我很好奇为什么我们在数字设计系统中使用加法来进行减法。
我有一种预感,它与成本和性能有关,但我不明白它会如何节省资金或提高效率。
【问题讨论】:
-
查找 2 的补数。加减法没有区别,只需要创建数字的负数即可。
我很好奇为什么我们在数字设计系统中使用加法来进行减法。
我有一种预感,它与成本和性能有关,但我不明白它会如何节省资金或提高效率。
【问题讨论】:
这真的分为两个问题:
为什么不为每个操作使用专用电路?
设计中的每个额外电路都需要花费金钱和时间来设计、验证和分配空间、功率和时序预算。如果我们可以设计一个可以处理多个操作的单一电路,我们将(几乎)总是领先。
在数字电路中,“a + b”和“a - b”是两种不同的运算,需要不同的电路。幸运的是,在算术中,“a + b”与“a + (-b)”是一样的,所以数学并不关心我们使用哪一个。一些非常聪明的人利用这个数学事实为有符号数提出了一个聪明的表示,称为Two's Complement。这种表示可以很容易地添加和反转正数和负数。
既然我们现在可以用一个电路实现加法和减法,那么创建第二个电路是没有意义的。
好的,那为什么要添加呢?
如果操作现在可以互换,为什么我们要实现所有的加法而不是减法?对此我只能推测,但我怀疑有以下原因:
加法器电路没有减法器复杂:
半加法器:
半减法器:
请注意,减法器添加了一个反相器。每个晶体管在数字设计中都很重要,所以在其他条件相同的情况下,我们应该使用组件更少的电路。
此外,加法只是一种更常见的操作。递增指令指针和其他内存地址、迭代器/循环索引和其他规则形成的值比后退更常见。如果我们选择本地处理减法或加法(我们就是这样,因为我们只打算将一个电路专用于两者),那么选择最常见的一个是有意义的。现在我们为减法运算添加了一个额外的步骤(转换为二进制补码),但最好在更常见的加法运算中添加一个额外的步骤。
进一步阅读
EE.SE上有一个非常相似的问题:Addition and subtraction in digital electronics
【讨论】: