在电脑内部,所有的运算都是加法,不过计算机的加法计算十分反人类,并不是人类思维,而是机器思维。
首先,计算机把数转换成二进制,全是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=**,13=**,
取13的补码为**,加1后为**,
相加有** **=**,位数已超过八位,把最高位舍弃,取后八位为**,也就是十进制的2。
这里的计算感觉很复杂,也不容易理解。
实际,计算机计算起来并不麻烦,甚至非常简便快捷,因为计算机内部存在加法器,几个时钟周期就可以计算一次加法,再加计算机内部都是自动化计算,通过加法器完成,计算起来非常快。
如果人脑跟踪这些计算过程,就会觉得计算机实在是太傻了,简单的减法不知道运行了多少次。
计算机里一个叫做ALU的功能模块,里面有很多硬件的计算电路,比如加减乘除,开指数,指数,微分,积分,等等。
这些硬件可以直接处理最基本的运算,加快数据的计算速度,是一种傻瓜式计算,所有过程集成在硬件里面。
自然,加减乘除,开指数,指数,微分,积分等等运算也是由加法实现的,这里有很多的数学理论,计算机实际就是数学思想的结晶。
ALU还有一个功能,那就是决定进行哪种运算,键盘的数学运算符号用来决定ALU的选择,如果计算更复杂一点可以通过软件选择ALU进行那种运算。
设计计算机首先就要设计ALU,也就是设计加法器,计算机内部的加法器有全加器、纹波进位加法器、超前进位加法器。
一个全加器只能进行一位二进制的加法,有了全加器以后,就能做多位二进制数的加法了,只要把多个全加器的输入和输出连起来,就像可以实现多位的加法。
纹波进位加法器就是一个把许多个全加器串联起来的加法器,它能进行多位数的加法运算。
但这种加法器有种缺陷,就是bit位运算太慢,每个bit位的计算都要等到个bit的运算结束后才能进行运算,导致如果运算位数非常之多的话,整个加法器运算会非常缓慢,所以纹波进位加法器只能做bit位较少的加法计算。
如果要进行bit位较多的加法计算,就要设计超前进位加法器,这种加法器不需要等一位的运算结束,而是直接就可以通过布尔运算得出当前位的值,而计算的方式是利用硬件计算。
所以超前进位加法器也有缺陷,因为要利用硬件进行布尔运算,位数越多电路就越复杂,这样不仅运算会变慢,成本也会变高。
而用硬件进行布尔运算也需要用到加法器,所以超前进位加法器也是由全加法器实现的,只不过拥有更多的全加器,构成了超前进位全加器。
这样布尔运算模块和超前进位加法器互相包含,构成了极为复杂的结构。
但是不管怎么复杂,只要设计成功,以后就可以直接拿来用,不用再次分析和设计。
除了加法器之外还有减法,乘法,除法,等等,这是计算机必须的。
计算机要进行复杂的运算,需要利用数值计算方法的原理,或是将各种数学函数变换变为只有加减乘除的多项式,或是使用迭代的方式计算,或是近似计算等等。
这又是一个新的数学领域。
本站域名已经更换为m.adouyinxs.com 。请牢记。