二进制运算是数字电路最核心的数学知识之一,有以下运算式:
可以发现上述加减法与十进制貌似不一样,但实际上是只针对单一位进行研究,1+1=0是进位的因素,该位依然是0,减法同理是借位的因素影响。与十进制8+3=1,9+6=5是一样的道理。我们将位数拓展至二位便可理解全貌:
示例:1110*0101,算术竖式如下:
除法也是按照同样的十进制除法进行计算,由于篇幅所限不做展开说明,后面会详细讨论除法和小数。
针对上面二进制加法算式,我们可以构造如下真值表,该真值表对应的是两输入-两输出的逻辑电路。
当我们在构造电路时,应当逐一分开分析。首先我们应该将两输入-两输出拆分成两个两输入一输出的真值表,针对每个真值表进行构造,如下图所示(SUM表示和,CAR表示进位):
分析输出为SUM的真值表,不难发现,这正是异或门XOR。而输出为CAR的真值表正好对应为与门,因此满足上面二进制加法算式的逻辑电路图如下:
该电路即为半加器(h-add),符号记为上图所示。
半加器存在一个问题,对于两输出来看,所有情况应该为:00,01,10,11;它们分别对应十进制:0,1,2,3,但半加器的两输入最多只高计算1+1,也就是最高结果只能输出为2。那么该如何满足两输出的所有情况呢?答案是让电路最高可计算1+1+1=3,也就是三输入,因此对于完善后的三输入两输出,我们称之为全加器(add)。它的真值表如下:
如果沿用前面半加器的思路,将这个三输入-二输出的真值表分解为两个三输入-一输出的真值表,输出为SUM的真值表实际上是我们前面所搭建过的奇数校验电路,虽然前面的奇数校验电路是四输入,但是允许可有一个不接入,而输出为CAR的真值表实际上是偶数校验电路,因此按照半加器类似的拼接方法便可以完成全加器的搭建。
基于这种电路的数学原理是:在二进制中逢二进一,因此当输入为偶数个时总会进位,而输入为奇数时,则不会进位,而是激活当前位。
还有一种原理是基于算式:
Result 1 的结果最大是10,而输入C无论为1或0,都不改变Result的CAR位结果,而如果Result为01,加上C为1,会产生Result 2的进位。基于这种逻辑搭建的全加器电路图如下:(这种全加器会比基于奇偶校验的全加器要使用更少的逻辑门,有更少的耗材和更低的延迟)。