“道生一,一生二,二生三,三生万物”, 出子老子《道德经》第四十二章,以哲学的角度阐述了万物生长演化之过程。然而天道崇简,万法归宗,这短短的十三字其实蕴含了集成电路,更确切的说是数字电路运行的基本原理。
“道生一”,“一”指的是“气”。对于集成电路中的场效应晶体管,电压便是这“气”。通过改变晶体管上的电压,我们可以控制通过晶体管的电流的大小。对于数字电路,晶体管的状态则被简化为“开”与“关”两种形式,因此只需要一个高电压和一个低电压就可以控制。这便是“一生二”的由来。“二”指的是阴阳,低电压是阴,对应了数字“0”;高电压是阳,对应了数字“1”。数字0和1构成了二进制,而任意内容,不论是文字、图像、视频等等,只要是有限的,都可以用一定长度的二进制数表示出来。
不过,仅仅能够表示任意的内容是不够的。计算机,计算机,其关键在于“计算”二字。“二生三”中的“三”,其实就是在0和1的基础上进一步解决数字之间的计算问题。事实上,不论多么复杂的计算,都可以用三种(注1)最为基础的逻辑运算来实现——“与”(AND),“或”(OR),“非”(NOT)。由于AND,OR,NOT属于逻辑运算,我们可以把数字“0”和“1”分别当作逻辑上的“假”和“真”。现在我们假设有两个变量A和B,通过运算得出结果S。由于A和B分别可以取0和1,这样A和B的组合一共有[00, 01, 10, 11]四种情况,我们需要讨论的是结果S的取值。
对于“与”(AND)运算,只有在A和B都是真的情况下,S的结果才是真。比如“请携带身份证和户口本前去办理”中的“和”字,就是一种与运算。我们也常常用下面的真值表(Truth Table)来表达逻辑运算。真值表列举了所有输入的组合和与之对应的输出,使得运算的结果变得十分直观。以上面的句子为例,可以把变量A理解为是否带了身份证,变量B理解为是否带了户口本,结果S理解为是否可以办理业务。通过真值表我们可以非常容易地看出,只有既带了身份证,又带了户口本,才能办理业务。至于其它情况,不好意思请回吧。
如果把上面的例句改为“请携带身份证或户口本前去办理”,那么我们便实现了或运算——只要你带了身份证、户口本中的任何一件,都可以办理业务。其真值表如下:
和“与”,“或”运算不同,“非”运算(NOT)只对一个变量进行操作,它把假的变成真的,把真的变成假的,例如“今天不会下雨”中的“不”字。它的真值表则简单的的多:
那么为什么任意的逻辑运算都可以用与、或、非的组合实现呢?这在数学上是可以被严格的证明的。直观一点来讲,任何逻辑运算都可以通过真值表枚举出所有输入和输出的组合,而与、或、非恰好可以用来描述其中所有的排列组合。我将会在后面一篇文章《加法的实现》中作更为详细的解释和推导。
世间事大抵如此,往往越复杂的系统,其基本原理就越惊人的简约。围棋、DNA中的A/T/C/G也正是相似的例子。但简约并不等于简单,基本原理的简约意味着对事物本质的高度提炼、意味着更高的自由度和更少的限制条件,由此便能创造出无穷无尽的可能性。这也正是“道生一,一生二,二生三,三生万物”的内涵之一吧。
注1:实际上我们只需要一种最基本的逻辑运算,“与非”(NAND)或者“或非”(NOR)就能实现任意的运算,但是为了方便理解一般我们都从与或非三种基本运算入手。