上一篇-自制简单CUP第四篇(加法器)
五、支持减法运算的加法器
上一篇我们做出了加法器,既然有加法器,那是不是应该也要有减法器呢,理论上是这样子的,但是实际上,我们可以对加法器稍微改造,让它支持减法运算
我们知道,在计算机中,计算机是使用补码这种编码方式来存储整数的,因为当数字使用补码进行运算时,一个正数加上一个负数也是可以直接进行加法运算的,而一个正数减去一个正数时,例如a-b,也等价于a+(-b),这样子可以使得我们进行加减操作,都可以转换为加法来完成
补码:一个负数的补码就是将这个数的原码除去符号位之外的每一位按位取反后加1,正数的补码等于正数的原码
利用这个思想,只要我们在加法器中,对减数的每一位取反,再加一,然后对这两个数进行相加,其实就是做减法操作,很神奇有没有!!!
进行减法第一步:对每一位进行取反
我们重新回过头来看异或门
01得1
00得0
10得1
11得0
连续看到'得'这个字时,我已经忘记这个字了,也看不出这个字是不是这样子写了
总结一个规律,一个数跟0异或时,等于它自己,一个数跟1异或时,就是取反,所以我们可以增加一个输入代表进行加法或者减法运算的控制,当进行加法时,这个输入为0,当进行减法时,这个输入为1
第二步;取反后加1
不知道你们还记不记得,在一个加法器中,第一个全加器的第三位输入,因为用不到它,所以我们设置为0了,很巧合的是,那个输入在做减法运算的时候就完美发挥它的作用了
当我们进行减法运算时,就把那个输入设置为1,完美解决加1这个问题,如果没有那个输入,这里可能还得再加一个加法器进行加一操作,这样子就显得有点浪费了
根据上面的分析,我们就可以画出能进行加法运算又能进行减法运算的加法器了:
进行1111-1101,结果等于11(15-13=2)
进行1111-1101,结果等于11100(15+13=28)
有关加法器的设计就到这里了,一路走来,从不知道有什么作用的异或器->半加器->全加器,当组成加法器时,似乎一切都发生了蜕变,终于不再是一堆零零散散的电路门了,而是一个可以解决实际问题的电路,有点越来越期待后面的内容了