利用这些简单的门电路就可以实现最为关键的加法器。
在电脑内部,所有的运算都是加法,不过计算机的加法计算十分反人类。
首先,计算机把数转换成二进制,全是0、1代码,转换都是按现成的程序进行。
如果计算加法,则把两数按位相加,如13+15,转换后是1101+1111,按0+0=0,1+0=0+1=1,1+1=10的规则,结果为11100,输出时再转换为28。
如果是计算减法,则把减数取补码,按位把0换成1,把1换成0,后加1,再相加。
以八位数据计算为例子,计算15-13,
先转换15=00001111,13=00001101,
取13的补码为11110010,加1后为11110011,
相加有00001111+11110011=100000010,位数已超过八位,把最高位舍弃,取后八位为00000010,也就是十进制的2。
这里的计算感觉很复杂,实际上,计算机计算起来并不麻烦,甚至非常简便快捷,因为计算机内部存在加法器,几个时钟周期就可以计算一次加法,再加上计算机内部都是自动化计算,通过加法器完成,计算起来非常快。
加法运算就是用加法器实现的,计算机里一个叫做ALU的功能模块,里面有很多硬件的计算电路,比如加减乘除,开指数,指数,微分,积分,处理最基本的运算,加快数据的计算速度。
自然,加减乘除,开指数,指数,微分,积分等等运算也是由加法实现的,这里有很多的数学理论,计算机实际上就是数学思想的结晶。
ALU还有一个功能,那就是决定进行哪种运算,键盘上的数学运算符号用来决定ALU的选择,如果计算更复杂一点可以通过软件选择ALU进行那种运算。
设计计算机首先就要设计ALU,也就是设计加法器,计算机内部的加法器有全加器和纹波进位加法器、超前进位加法器。
一个全加器只能进行一位二进制的加法,有了全加器以后,就能做多位二进制数的加法了,只要把多个全加器的输入和输出连起来,就像可以实现多位的加法。
纹波进位加法器就是这样一个简单地把许多个全加器串联起来的加法器,它能进行多位数的加法运算,但这种加法器有种缺陷,就是bit位运算太慢,每个bit位的计算都要等到上个bit的运算结束后才能进行运算,导致如果运算位数非常之多的话,整个加法器运算会非常缓慢,所以纹波进位加法器只能做bit位较少的加法计算。
如果要进行bit位较多的加法计算,就要设计超前进位加法器,这种加法器不需要等上一位的运算结束,而是直接就可以通过布尔运算得出当前位的值,而计算的方式是利用硬件计算。
所以超前进位加法器也有缺陷,因为要利用硬件进行布尔运算,位数越多电路就越复杂,这样不仅运算会变慢,成本也会变高。
而用硬件进行布尔运算也需要用到加法器,所以超前进位加法器也是由全加法器实现的,只不过拥有更多的全加器,构成了超前进位全加器。
除了加法器之外还有减法,乘法,除法,等等,这是计算机必须的,计算机要进行复杂的运算,需要利用数值计算方法的原理,或是将各种数学函数变换变为只有加减乘除的多项式,或是使用迭代的方式计算,或是近似计算等等。