qakcn
学生会会长
学生会会长
  • 注册日期2008-10-31
  • 最后登录2021-01-05
  • 生日1988-8-18
  • 光玉3394颗
阅读:1454回复:12

科普第26篇——计算机是怎样做加法的

楼主#
更多 发布于:2012-06-08 16:24
本来这篇应该是讲内部接口的,本来接下来应该继续讲网络的,可是我自己的电脑不能用,只能在网吧将就一下,于是就来这样一篇吧。

首先,我们要明确一点——计算机是不会做数学运算的。
可能有人要反驳了,别急,我们慢慢说来。

那么计算机会做什么运算呢?对计算机有一点了解的人可能已经知道答案了——计算机只会做逻辑运算。

什么是逻辑运算,说白了,就是对“真”和“假”的运算。
真和假这两种状态可以非常方便地表示——可以是电位的高和低,可以使电流的有和无,或者,可以是0和1。
没错,正是因为计算机只会做逻辑运算,所以计算机里使用的基本数制才是二进制——0和1.,真和假,就这么对应上了。

逻辑运算,高中都要学,即使没学过的不太理解,将来也会明白的。
逻辑运算只有三种基本运算:或、与、非。
或和与都是双目运算符,需要对两个数进行运算;非是单目运算符。

逻辑运算里最常见的一种表示方式,就是真值表了。为了加深大家对二进制的印象,下面都用0表示假,1表示真。

或运算(or):或运算用符号“∨”来表示,在计算机和电子学领域也会见到“||”、“+”(逻辑加)的表示方式。A∨B的真值表如下:
[table=20%][tr][td]A
[/td][td]B
[/td][td]A∨B
[/td][/tr][tr][td]0
[/td][td]0
[/td][td]0
[/td][/tr][tr][td]1
[/td][td]0
[/td][td]1
[/td][/tr][tr][td]0
[/td][td]1
[/td][td]1
[/td][/tr][tr][td]1
[/td][td]1
[/td][td]1
[/td][/tr][/table]
用文字来描述的话,就是“只有在A、B均为假时,A∨B才为假。”

与运算(and):与运算用符号“∧”来表示,在计算机和电子学领域也会见到“;;”、“·”(逻辑乘)的表示方式。A∧B的真值表如下:
A
B
A∧B
0
0
0
1
0
0
0
1
0
1
1
1

用文字来描述的话,就是“只有在A、B均为真时,A∧B才为真。”

非运算(not):非运算通常用符号“¬”来表示,除此之外还有一横(加在逻辑数之上)、“~”、“!”等表示方式。¬A的真值表如下:
A
¬A
0
1
1
0

用文字来描述的话,就是“对A取相反的值“。

其他所有的逻辑运算,都可以用这三种基本运算表示出来。

可是,还是没说到计算机是怎样做加法的啊!
别着急,我们先来看看一位二进制数的加法:
0+0=0
1+0=1
0+1=1
1+1=10
如果我们把进位另外考虑的话,最后一个可以写成1+1=0(进一位)。
然后我们把0当做假,1当做真,把二进制加法转换成某种逻辑运算。我们先用⊕来表示这个运算,其真值表如下
A
B
A⊕B
0
0
0
1
0
1
0
1
1
1
1
0

文字描述就是:”A和B不同时为真,相同时为假“。

上面说过,所有其他逻辑运算都可以用三种基本运算来表示,那么这个运算怎么表示呢?
不需要大家去自己去想,下面就告诉大家:
A⊕B = ( A ∧ ¬B ) ∨ ( ¬A ∧ B ) = ( A ∨ B ) ∧ ( ¬A ∨ ¬B ) = ( A ∨ B ) ∧ ¬( A ∧ B ) = ¬( ( A ∧ B ) ∨ ( ¬A ∧ ¬B ) )
上面几个式子都是等价的,至于怎么转换,有兴趣的去查查相关的内容吧!

这种运算,就被称作”异或“(xor),异或的运算符正是我们上面所用的这个。根据这种运算设计出来的逻辑电路,就被称作”半加器“。当然,半加器除了有异或运算输出的当前位之外,还有一个表示进位的输出,这个输出想必大家能看出来,就是根据A∧B算出来的。

又说到了新名词,逻辑电路。逻辑电路,顾名思义,就是进行逻辑运算的电路。逻辑电路里的基本构成是逻辑门,所以逻辑电路也叫门电路。逻辑电路是由晶体管等电子元件构成的,但是为了表示方便,逻辑门有自己的符号(而不考虑实际是由什么电子元件组成的)。逻辑电路从输入端输入高、低电平,从输出端输出经过逻辑运算得到的高低电平(究竟是高表示真低表示假,还是低表示真高表示假,这并没有统一规定)。上面介绍的四种运算的表示方法如下:
非门:
与门:
或门:
异或门:

半加器有两个输入端A和B(加数和被加数),有两个输出端S(和)和C(进位),S=A⊕B,C=A∧B。真值表如下:
输入输出
ABCS
0000
0101
1001
1110

半加器的逻辑电路如下:


可是,还是有问题,半加器虽然能输出进位,但却无法输入进位,于是又在此基础上,构造了一种新的逻辑电路——全加器。
相比半加器,全加器多了一个输入进位的Cin,输出的和S和进位Cout也是在A、B、Cin相加算出的。
S=(A⊕B)⊕Cin
Cout=(A∧B) ∨(Cin∧(A⊕B))=(A∧B)∨(B∧Cin)∨(Cin∧A)
真值表:
输入输出
A
C
CinCoutS
00000
00101
01001
01110
10001
10110
11010
11111

逻辑电路:

不知各位有没有注意到,全加器是由两个半加器组成的,两个半加器的C端再通过一个或门(也可以用异或门代替,想想为什么)。

将多个全加器Cout和Cin串联起来,就能组成多位加法器,加数和被加数的各位分别从对应的加法器的A、B端输入,和就从加法器的S端输出,最初的Cin可以输入0而最后的Cout可以输出到一个溢出标志位。

就这样,数学运算就被转换成逻辑运算了。
在电子计算机出现以前,已经有很多数学家为它的诞生打下了基础,比如学过计算机编程的一定不陌生的乔治·布尔(George Boole),就对本文中讲到的数理逻辑做出了很多贡献。

后面有机会,我们来讲讲计算机是怎样做减法的吧。


==========之前的文章==========
科普第1篇——计算机色彩
科普第1篇补遗——CSS颜色
科普第2篇——光盘
科普第3篇——2、8、10、16
科普第4篇——电池
科普第5篇——浏览器
科普第6篇——字符编码
科普第7篇——加密解密
科普第8篇——移动通信技术
科普第9篇——为什么32位CPU不能支持大于4GB内存?
科普第10篇——智能手机简介
科普第11篇——14.52-14.49=0.0299999?
科普第12篇——为什么HTTPS会更安全?
科普第13篇——计算机语言
科普第14篇——字体(上)
科普第15篇——字体(中)
科普第16篇——字体(下)
科普第17篇——域名解析
科普第17篇补遗——域名
科普第18篇——虚拟内存
科普第19篇——时间
科普第20篇——日期
科普第21篇——日期时间补遗及计算机的时间
科普第22篇——网络(0):基本概念
科普第23篇——科普第23篇——二进制的线性编码
科普第24篇——网络(1):OSI模型
科普第25篇——外部接口(第一次修订)

科普番外篇1——虽然没用但了解一下也很有趣的知识
科普番外篇2——月食
喜欢1 评分0

最新喜欢:

blood-nightlordblood-...
游客

返回顶部