计算机速成课Crash Course - 03. 布尔逻辑和逻辑门

今天继续计算机速成课Crash Course的系列讲解。

更多技术文章,全网首发公众号 “极客之昂” 锁定 -上午11点 - ,感谢大家关注、转发、点赞!

03. 布尔逻辑和逻辑门

今天我们开始"抽象"的旅程,不用管底层细节,把精力用来构建更复杂的系统。

上集,我们谈了计算机最早是机电设备,一般用十进制计数,比如用齿轮数来代表十进制,再到晶体管计算机。

图片

幸运的是,只用 开/关 两种状态也可以代表信息。

这叫二进制,意思是"用两种状态表示"。就像自行车有两个轮,双足动物有两条腿。

你可能觉得两种状态不多,你是对的!

但如果只需要表示 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。

与其把下面那根线当做输出,我们可以把输出放到上面,如果打开输入,电流可以流过然后 "接地",输出就没有电流,所以输出是 off。

图片

如果用水来举例,就像家里的水都从一个大管子流走了,打开淋浴头一点水也没有。

如果输入是 on,输出是 off,当输入是 off,电流没法接地,就流过了输出,所以输出是 on。

如果输入是 off,输出是 on。

图片

和 NOT 操作表一样!太棒了!我们做了个有点用的电路!

我们叫它 "NOT 门" ,之所以叫 "门",是因为它能控制电流的路径。

"AND"操作有 2 个输入,1 个输出。如果 2 个输入都是 true,输出才是 true。

你可以想成是说真话,如果完全不说谎,才是诚实。

举例,看如下这个句子。

我叫 Carrie Anne "而且"我穿着蓝色的衣服,2 个都是真的,所以整个是真的。但如果说,我叫 Carrie Anne"而且"我穿了裤子, 就是假的,因为我没穿裤子。

图片

虽然前半句是真的,但是真 AND 假,还是假,就算把前后顺序反过来,也依然是假。

如果我说 2 个假的事情,那么结果是假。和上次一样,可以给"AND"做个表:

图片

为了实现 "AND 门",我们需要 2 个晶体管连在一起,这样有 2 个输入和 1 个输出。

图片

如果只打开A,不打开B ,电流无法流到output,所以输出是false;如果只打开B,不打开A ,也一样,电流无法流到output,输出也是false。

图片

只有 A 和 B 都打开了,output 才有电流。

图片

最后一个是 OR(前面讲了 NOT 和 AND)。

只要 2 个输入里,其中 1 个是 true,输出就是 true。

比如,我叫"Margaret Hamilton"或"我穿着蓝色衣服",结果是 true。因为虽然我不是Margaret Hamilton,但是我穿着蓝色衣服,所以结果是 true。

对于"OR"操作来说,如果 2 个 输入都是 true,输出也是 true。只有 2 个输入都是 false,OR 的结果才是 false。

图片

实现 "OR 门" 除了晶体管还要额外的线,不是串联起来,而是并联。

然后左边这条线有电流输入,我们用"小拱门"代表 2 条线没连在一起,只是跨过而已,虽然看起来像连在一起。

图片

如果 A 和 B 都是 off,电流无法流过,所以输出是 off。如果打开 A,电流可以流过。输出是 on。如果只打开 B 也一样。

图片

只要A或者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。

图片

XOR 超有用的,我们下次再说它。

因为超有用,工程师给了它一个符号,一个 OR 门 + 一个笑脸。

图片

重要的是,现在可以把 XOR 放入"工具箱"了。不用担心 XOR 具体用了几个门,这几个门又是怎么用晶体管拼的,或电子是怎么流过半导体的。

再次向上抽象。(又完成了一次抽象)

工程师设计处理器时,很少在晶体管的层面上思考,而是用更大的组件,比如逻辑门,或者由逻辑门组成的更大组件。

图片

就算是专业程序员,也不用考虑逻辑是怎样在物理层面实现的。

我们从电信号开始,到现在第一次表示数据:真和假,开始有点"计算"的感觉了。

仅用这集讲的逻辑门,我们可以判断复杂的语句,比如:

[如果是 John Green] AND [下午 5 点后] OR [周末] AND [在比萨店附近]

那么 "John 想要比萨" = 真

都说饿了,下节课见。


以上内容就是 03. 布尔逻辑和逻辑门 的内容,感兴趣的同学记得点赞、关注、转发、收藏哦!

我会不定期发布课程的讲解!

更多技术文章,全网首发公众号 “极客之昂” 锁定 -上午11点 - ,感谢大家关注、转发、点赞!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客之昂-钛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值