点击上方“图灵人工智能”,选择“星标”公众号
您想知道的人工智能干货,第一时间送达
之前,我们讨论了计算机如何从电机机械设备演变而来,这些设备通常采用十进制表示数字——例如,齿轮上的齿——到使用晶体管的电子计算机,晶体管可以打开或关闭电流的流动。幸运的是,即使只有两种电流状态,也能表示重要信息。我们称这种表示为二进制——字面意思是“两个状态”。
你可能会认为只有两种状态并不多,这一点你说得对!但这正是表示“真”和“假”值所需的。在计算机中,电流流动的“开”状态表示真,而没有电流流动的“关”状态表示假。
我们还可以将二进制写作1和0,而不是“真”和“假”——它们只是同一信号的不同表示。
实际上,可以使用晶体管做的不仅仅是开关电流,还可以实现不同的电流水平。一些早期的电子计算机是三元的,即三种状态,甚至是五元的,使用五种状态。问题是,中间状态越多,保持它们分离的难度就越大——如果你的智能手机电池开始耗尽,或者因为有人在附近使用微波炉而产生电噪声,信号可能会混淆……而这个问题在晶体管每秒切换数百万次状态时只会变得更糟!因此,将两个信号尽可能分开——仅使用“开”和“关”——为我们提供了最明确的信号,以最小化这些问题。
计算机使用二进制的另一个原因是,已经存在一个专门处理真和假值的数学分支。它已经找到了所有必要的规则和操作来操纵这些值。这被称为布尔代数!
乔治·布尔是布尔代数的命名来源,他是19世纪自学成才的英国数学家。他对表示逻辑语句感兴趣,这些语句“在亚里士多德的逻辑方法之上、之下和之外”,这显然是以哲学为基础的。
布尔的方法允许通过逻辑方程系统和正式地证明真理,这些方程他在1847年出版的第一本书《逻辑的数学分析》中介绍。在“常规”代数中——你可能在高中学过的那种——变量的值是数字,对这些数字的操作是加法和乘法等。而在布尔代数中,变量的值是真和假,操作则是逻辑操作。
布尔代数中有三种基本操作:NOT、AND和OR操作。事实证明,这些操作非常有用,因此我们将逐个查看它们。
NOT操作接受一个布尔值,无论是真还是假,并对其取反。它将真翻转为假,假翻转为真。我们可以写出一个小逻辑表,显示输入下的原始值和应用操作后的输出结果。
我们可以轻松地用晶体管构建布尔逻辑。晶体管实际上只是小的电控开关。它们有三根导线:两个电极和一根控制线。
当你将电流施加到控制线上时,它允许电流从一个电极流过晶体管,流向另一个电极。这就像管道上的水龙头——打开水龙头,水就流出;关闭水龙头,水就停止流动。你可以将控制线视为输入,从下方电极来的线视为输出。
所以,使用一个晶体管,就有一个输入和一个输出。如果打开输入,输出也会打开,因为电流可以通过它流动。如果关闭输入,输出也会关闭,电流不再通过。用布尔术语来说,当输入为真时,输出为真;当输入为假时,输出也为假。我们同样可以在逻辑表中展示这一点。
不过,这并不是一个非常有趣的电路,因为它没有做任何事情——输入和输出是相同的。但是,我们可以稍微修改这个电路,以创建一个NOT。我们可以将输出线从晶体管末端移到前面。
如果打开输入,晶体管允许电流流向“接地”,而输出线不会接收到电流——所以它将是关闭的。接地就像是你家里的水都流向了一根巨大的水管,所以你淋浴时没有水压。
因此在这种情况下,如果输入是开,输出就是关。不过,当关闭晶体管时,电流被阻止流向接地,所以电流会流过输出线。因此,输入将是关,输出将是开。这与NOT逻辑表一致,因此恭喜你,刚刚构建了一个计算NOT的电路!称它们为NOT门——称它们为门,因为它们控制着电流的路径。
AND布尔操作接受两个输入,但仍然有一个输出。在这种情况下,只有当两个输入都为真时,输出才为真。就像说真话。如果你哪怕撒了一点谎,你就没有完全诚实。
为了构建一个AND门,需要两个晶体管连接在一起,这样我们就有两个输入和一个输出。
如果仅打开晶体管A,电流不会流动,因为电流被晶体管B阻止。或者,如果晶体管B是开,而晶体管A是关,同样,电流也无法通过。只有当晶体管A和晶体管B都打开时,输出线才有电流。
最后的布尔操作是OR——只需一个输入为真,输出就为真。OR语句如果两个事实都为真,也是正确的。OR语句唯一为假的时候是两个输入都为假。
从晶体管构建一个OR门需要一些额外的导线。我们不是将两个晶体管串联在一起——一个接一个,而是将它们并联。
我们从电流源引出导线连接到两个晶体管。使用一个小弧线来表示导线跳过彼此,并没有连接,尽管它们看起来像是交叉的。如果两个晶体管都关闭,电流会被阻止流向输出,所以输出也是关。现在,如果仅打开晶体管A,电流可以流向输出。如果晶体管A是关,但晶体管B是开,同样情况,电流也能通过。基本上,如果A或B是开,输出也是开。如果两个晶体管都是开,输出仍然是开。
现在我们有了NOT、AND和OR门,我们可以抛开构成它们的晶体管,提升到一个更高的抽象层次。工程师们用的这些门的标准表示是:NOT用一个带点的三角形表示,AND用一个D表示,OR用一个飞船表示。
虽然这些不是正式名称,但我喜欢这样想。以这种方式表示和思考它们,可以让我们构建更大的组件,同时保持整体复杂性相对不变——只要记住,那堆晶体管和导线仍然在那里。
例如,另一个在计算中有用的布尔操作称为异或——简称XOR。XOR类似于普通的OR,但有一个不同之处:如果两个输入都为真,则XOR为假。XOR唯一为真的情况是一个输入为真,而另一个输入为假。
从晶体管构建XOR会比较混乱,但我们可以展示如何从三个基本的布尔门创建一个XOR。
有两个输入——A和B——和一个输出。从一个OR门开始,因为逻辑表几乎与OR相同。唯一的问题是,当A和B为真时,逻辑与OR不同,我们需要将输出置为假。为了实现这个,需要使用两个AND门和一个NOT门。
可以通过将A和B输入到AND门中,创建A和B的AND输出,再将A与NOT B结合到另一个AND门。将这两个输出连接到OR门就构建好了XOR。这种使用基本门组合的方式通常称为“组合逻辑电路”。
既然我们可以构建XOR门,实际上可以构建出更复杂的电路,也就是说,门与门之间的连接可以像输入一样形成输出。可以创建加法器电路、乘法器电路,甚至是完整的CPU——它们都只是由相同的几种门组合而成。
版权声明
转自老胡说科学,版权属于原作者,仅用于学术分享
文章精选: