【计算机科学速成课】[40集全/文字版] - 3.布尔逻辑和逻辑门

嗨,欢迎阅读计算机科学速成课!

今天我们开始"抽象"的旅程,不用管底层细节,把精力用来构建更复杂的系统,上集,我们谈了计算机最早是机电设备,一般用十进制计数。比如用齿轮数来代表十进制,再到晶体管计算机,幸运的是,只用开/关两种状态也可以代表信息,这叫二进制。意思是"用两种状态表示",就像自行车有两个轮,双足动物有两条腿,你可能觉得两种状态不多,你是对的!

但如果只需要表示true和false ,两个值就够了。电路闭合,电流流过,代表 "真"。电路断开,无电流流过,代表"假"。二进制也可以写成 1 和 0 而不是true和false,只是不同的表达方式罢了,我们下集会讲更多细节。

晶体管的确可以不只是 开/关,还可以让不同大小的电流通过,一些早期电子计算机是三进制的,有3种状态,甚至五进制,5种状态。问题是,状态越多,越难区分信号,如果手机快没电了或者附近有电噪音,因为有人在用微波炉,信号可能会混在一起,而每秒百万次变化的晶体管会让这个问题变得更糟!

所以我们把两种信号尽可能分开,只用"开"和"关"两种状态,可以尽可能减少这类问题,计算机用二进制的另一个原因是,有一整个数学分支存在,专门处理"真"和"假",它已经解决了所有法则和运算,叫"布尔代数"!

乔治·布尔( George Boole)是布尔二字的由来,是一位19世纪自学成才的英国数学家,他有兴趣用数学式子,扩展亚里士多德基于哲学的逻辑方法,布尔用逻辑方程系统而正式的证明真理(truth)。他在1847年的第一本书"逻辑的数学分析"中介绍过,在"常规"代数里-你在高中学的那种-变量的值,是数字,可以进行加法或乘法之类的操作。但在布尔代数中,变量的值是true和false,能进行逻辑操作。

布尔代数中有三个基本操作:NOT、AND和OR,这些操作非常有用,我们一个个来看,NOT操作把布尔值反转,把true进行NOT就会变成false ,反之亦然。我们可以根据NOT操作的输入和输出,做出这个表:

 酷的地方是,用晶体管可以轻松实现这个逻辑,上集说过,晶体管只是电控制的开关,有3根线:2根电极和1根控制线,控制线通电时,电流就可以从一个电极流到另一个电极,就像水龙头一样,打开水龙头,就有水流出来,关掉水龙头,就没水了。可以把控制线,当做输入(input),底部的电极,当做输出(output)。所以1个晶体管,有一个输入和一个输出,如果我们打开输入(input on),输出也会打开(output on),因为电流可以流过。如果关闭输入(input off),输出也会关闭(output off),因为电流无法通过。

或者用布尔术语来说\ 输入为真,输出为真,输入为假\输出为假,我们也可以把这个做成"真值表"。这个电路没什么意思,因为它没做什么事,输入和输出是一样的,但我们可以稍加修改,实现NOT,与其把下面那根线当做输出,我们可以把输出放到上面,如果打开输入,电流可以流过然后 "接地",输出就没有电流,所以输出是

 如果用水来举例,就像家里的水都从一个大管子流走了,打开淋浴头一点水也没有。如果输入是 on,输出是off,当输入是off,电流没法接地,就流过了输出,所以输出是on。如果输入是off,输出是on

和NOT操作表一样!太棒了!我们做了个有点用的电路!我们叫它"NOT 门",之所以叫"门",是因为它能控制电流的路径。

"AND"操作有2个输入,1个输出,如果2个输入都是true,输出才是true,你可以想成是说真话,如果完全不说谎,才是诚实,举例,看如下这个句子:

我叫CA"而且"我穿着蓝色的衣服,2个都是真的,所以整个是真的。但如果说,我叫CA"而且"我穿了裤子就是假的,因为我没穿裤子。虽然前半句是真的,但是 真"AND"假,还是假,就算把前后顺序反过来,也依然是假,如果我说2个假的事情,那么结果是假。和上次一样,可以给"AND"做个表

 为了实现 " 门",我们需要2个晶体管连在一起,这样有2个输入和1个输出,如果只打开A,不打开B,电流无法流到output,所以输出是false。如果只打开B,不打开A,也一样,电流无法流到output。只有A和B都打开了,output才有电流。

 最后一个是OR,只要2个输入里,其中1个是true ,输出就是true,比如,我叫CN"或"我穿着蓝色衣服,结果是 ,虽然我不是CN,但是我穿着蓝色衣服,所以结果是true。对于OR"操作"来说,如果2个输入都是true ,输出也是true。只有2个输入都是false,OR的结果才是false。实现"OR门"除了晶体管还要额外的线,不是串联起来。而是并联

然后左边这条线有电流输入,我们用"小拱门"代表2条线没连在一起,只是跨过而已,虽然看起来像连在一起,如果A和B都是off,电流无法流过,所以输出是off。如果打开A,电流可以流过。输出是on。如果只打开B也一样,只要A OR B是on , 输出就是on。如果A和B都on,结果是on。

好,现在NOT门、AND门、OR门都搞定了。我们可以进行一次抽象,NOT门的画法是三角形前面一个圆点,AND门用D表示,OR门用太空船表示,D形状和太空船"不是标准叫法,只是我喜欢这样叫而已。我们可以用这种方法表示它们,构建更大的组件,就不会变得很复杂,晶体管和电线依然在那里,我们只是用符号来代表而已,除了前面说的三个,另一个有用的布尔操作叫 "异或",简称XOR,XOR就像普通OR,但有一个区别:如果2个输入都是true,XOR输出false。想要XOR输出true,一个输入必须是true,另一个必须是false

 

就像你出去吃晚饭,你点的饭要么配沙拉,要么配汤,你不能两个都要!用晶体管实现XOR门有点烧脑子,但我可以展示一下怎么用前面提到的3种门来做XOR门。我们有2个输入,A和B,还有 1个输出。我们先放一个OR门,因为OR和XOR的逻辑表很像。只有1个问题,当A和B都是true时,OR的输出和想要的XOR输出不一样,我们想要false,所以要多加几个门,如果加一个"AND门",输入是true和true,输出会是true,这不是我们想要的。但如果在AND的输出加个NOT就可以把true翻转成false了,我们最后再加一个"AND门",然后AND的2个输入,分别来自NOT和最原始的OR。AND会收到false和true,因为AND需要两个输入都为true,结果才是true。所以输出是false。XOR逻辑表的第一行对了,看接下来的几行,可以看到这个电路的确实现了XOR 

 

XOR超有用的,我们下次再说它,因为超有用,工程师给了它一个符号,一个OR门+一个笑脸。重要的是,现在可以把XOR放入"工具箱"了,不用担心XOR具体用了几个门,这几个门又是怎么用晶体管拼的,或电子是怎么流过半导体的,再次向上抽象。

工程师设计处理器时,很少在晶体管的层面上思考,而是用更大的组件,比如逻辑门,或者由逻辑门组成的更大组件,我们以后会讲,就算是专业程序员,也不用考虑逻辑是怎样在物理层面实现的,我们从电信号开始,到现在第一次表示数据,"真和假"开始有点"计算"的感觉了。仅用这集讲的逻辑门,我们可以判断复杂的语句,比如:[如果是小绿]AND[下午5点后]OR[周末]AND[在比萨店附近],那么小绿"想要比萨"=真。我都说饿了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值