www.hj8828.com 9

阮一峰:几位计算机的规律及其达成

你是否想过,计算机为什么会加减乘除?或者更直接一点,计算机的原理到底是什么?

你是否想过,计算机为什么会加减乘除?或者更直接一点,计算机的原理到底是什么?
Waitingforfriday有一篇详细的教程,讲解了如何自己动手,制作一台四位计算机。从中可以看到,二进制、数理逻辑、电子学怎样融合在一起,构成了现代计算机的基础。

可能你不知道,计算机的世界做的唯一工作就是做加法计算。

Waitingforfriday有一篇详细的教程,讲解了如何自己动手,制作一台四位计算机。从中可以看到,二进制、数理逻辑、电子学怎样融合在一起,构成了现代计算机的基础。

一、什么是二进制?

先来回顾一下在进行十进制加法的步骤。比如让245和673相加,会把这个问题分解为几个简单步骤,每个步骤只需要将两个十进制数相加。比如先把5和3相加,小时候背过的加法表就是解决这个问题。

一、什么是二进制?

首先,从最简单的讲起。

二进制不同于十进制的地方在于二进制相加的情况更加简单,情况更少。如下表:

首先,从最简单的讲起。

计算机内部采用二进制,每一个数位只有两种可能”0″和”1″,运算规则是”逢二进一”。举例来说,有两个位A和B,它们相加的结果只可能有四种。

www.hj8828.com 1

计算机内部采用二进制,每一个数位只有两种可能”0″和”1″,运算规则是”逢二进一”。举例来说,有两个位A和B,它们相加的结果只可能有四种。

www.hj8828.com 2

为了保持一致,使得每个结果都是两位数。改进如下:

www.hj8828.com 3

这张表就叫做”真值表”(truth
table),其中的sum表示”和位”,carry表示”进位”。如果A和B都是0,和就是0,因此”和位”和”进位”都是0;如果A和B有一个为1,另一个为0,和就是1,不需要进位;如果A和B都是1,和就是10,因此”和位”为0,”进位”为1。

www.hj8828.com 4

这张表就叫做”真值表”truth
table),其中的sum表示”和位”,carry表示”进位”。如果A和B都是0,和就是0,因此”和位”和”进位”都是0;如果A和B有一个为1,另一个为0,和就是1,不需要进位;如果A和B都是1,和就是10,因此”和位”为0,”进位”为1。

二、逻辑门(Logic Gate)

然后进行分析。发现二进制相加中,其中一位叫做加法位,另一个叫进位位。

Waitingforfriday有一篇详细的教程,讲解了如何自己动…

布尔运算(Boolean
operation)的规则,可以套用在二进制加法上。布尔运算有三个基本运算符:AND,OR,NOT,又称”与门”、”或门”、”非门”,合称”逻辑门”。它们的运算规则是:

加法位:

  AND:如果( A=1 AND B=1 ),则输出结果为1。

  OR:如果( A=1 OR B=1 ),则输出结果为1。

  NOT:如果( A=1 ),则输出结果为0。

www.hj8828.com 5

两个输入(A和B)都为1,AND(与门)就输出1;只要有任意一个输入(A或B)为1,OR(或门)就输出1;NOT(非门)的作用,则是输出一个输入值的相反值。它们的图形表示如下:

进位位(和与门的输出结果一样):

www.hj8828.com 6

www.hj8828.com 7

三、真值表的逻辑门表示

看到这个结果是否产生了什么联想。和上一篇讲的真值表,逻辑门似乎有些相似。

现在把”真值表”的运算规则,改写为逻辑门的形式。

其实在二进制加法中,加法和进位是分别进行的。运算过程和十进制加法一样。将数字串从右往左一次逐渐相加进位。

先看sum(和位),我们需要的是这样一种逻辑:当两个输入不相同时,输出为1,因此运算符应该是OR;当两个输入相同时,输出为0,这可以用两组AND和NOT的组合实现。最后的逻辑组合图如下:

接下来以一个加法长度为8位的简单加法器为例子。也就是我们要加的二进制数,范围是0000
0000 到1111 11111。相加和最大可以为1 1111 1110,十进制为510.

www.hj8828.com 8

输入设备如下:

再看carry(进位)。它比较简单,两个输入A和B都为1就输出1,否则就输出0,因此用一个AND运算符就行了。

www.hj8828.com 9

www.hj8828.com 10

最上面一排是被加数,第二批是加数

现在把sum和carry组合起来,就能得到整张真值表了。这被称为”半加器”(half-adder),因为它只考虑了单独两个位的相加,没有考虑可能还存在低位进上来的位。

www.hj8828.com,最后代表输出:这一排是灯泡(灯泡亮的代表1,不亮的代表0),注意这里为什么需要9个灯泡。因为两个八进制相加结果可能为9位。

www.hj8828.com 11

比如想要把0110 0101 和1011 0110相加,表示及结果(1 0001 1011)如下