从零开始学编码4
前面三篇文章我们了解了编码的本质,基本电路,以及各种进制数所引出的二进制数。以及具备了计算机科学的最基本单位,这一篇将介绍逻辑与开关,使用0和1表示逻辑学的运算,以及现实世界的逻辑问题和电路相互转化的过程,而下一篇我们介绍电路中的中继器和它的衍生出来的,2-4译码器、反相器、缓冲器,与门、或门、与非门、或非门。或许再说一下用逻辑门设计二进制加法器。编码一书本身的例子就非常好,便于理解,我将引入书中选猫咪的例子。
逻辑学是研究由条件推导结果的学科,在漫长的时间长河里,虽然有很多人研究这门学科,但是因为人们习惯于用数学符号和算子(+、-)来解释这个世界,而逻辑学并不像数字可以使用加减乘除来运算,所以并没有很好的突破,比较有名的是亚里士多德的三段论法:
所有男人都必有一死;
苏格拉底是男人;
因此,苏格拉底必有一死。
在这个逻辑学基础的三段论中,先假定两个条件是正确的,根据两个条件自洽的推断出结论。
终于乔治布尔出现了,布尔发明了一种代数,相对于传统代数用交换律、结合律以及分配律来处理数字,布尔代数用来处理类,一个类就是一个事物的群体,也称为集合。
而处理类的方法有并集和交集以及取反,例如:猫分为公猫和母猫,用M代表公猫,F代表母猫;猫根据颜色也可以分类,我们可以用T代表褐色的猫,B代表黑色的猫,W代表白色的猫,O代表其他颜色的猫;还可以根据是否绝育,用N表示已经绝育,U表示未绝育的猫。
我们用+号表示并集,x号表示交集,1表示全集,0表示空集。这样可以得出
M+F=1 (所有公猫和母猫的并集,是全部的猫)
T+B+W+O=1 (各种颜色的猫的并集,也是全部的猫)
N+U=1 (绝育和未绝育的猫的并集,也是全部的猫)
1-M=F (在全部的猫中排除掉公猫,就是母猫的集合)
MxF=0 (公猫和母猫的交集是空集,因为不可能一直猫既是公猫又是母猫)
F + F = F (母猫和母猫的并集是母猫)
F x F = F (母猫和母猫的交集还是母猫)
如果你想要一只猫,你去宠物商店中,给店员说:我想要一只猫公猫,已经绝育,白色的或者褐色的;或者是一只母猫,已经绝育了,但是不要是白色的;或者来一只黑猫就行。
你提出了一大串购买条件,如果店员刚好学习过逻辑学,他会给出这样一个集合:
(MxNx(W+T))+(FxNx(1-W))+B
当然店员用+、-和x这三个符号以及并集和交集的概念把你所描述的条件进行了重新抽象,用+代替了OR,用x代替了AND,用1-代替了NOT。你表达的是(M and N and (W or T)) or (F and N and (not W)) or B。
这时你们可以选择猫了,当然店员在逻辑数学方面很有天赋,他提议用数字1代表yes、true,表示这个猫符合这个标准,用数字0表示no、flase,表示猫不符合这个标准。
店员拿出来一只未绝育的褐色公猫,那么我们代入 (MxNx(W+T))+(FxNx(1-W))+B这个式子:
(1x0x(0+1))+(0x0x(1-0))+0
就这样店员轻易的将你的一个逻辑问题转化为一个逻辑代数式。
下一步就是简化这个式子,我们可以根据下面两个规则来进行简化。
用符号x代表and
and 0 1
0 0 0
1 0 1
用符号+代表or
or 0 1
0 0 1
1 1 1
(1x0x(0+1))+(0x0x(1-0))+0=0+0+0 = 0
最终简化结果是0,代表no,false,显然这只小猫不符合标准。
最后店员拿出来一只已绝育的灰色母猫,表达式可以表示为:
(0x1x(0+0))+(1x1x(1-0))+0 = 0+1+0 = 1
简化结果为1,代表yes,true。显然这只猫符合你的要求。
将现实的问题,通过转化为逻辑代数,最终只用0和1就解决了问题,从前面的文章我们知道简单的电路中根据开关闭合也能表达0和1这两个二进制数。那么是不是可以将布尔代数和电路相融合,设计出来一个可以使用二进制进行计算的计算机呢?
答案是肯定的。
在基本电路中我们可以将两个开关串联,如果开关都不闭合或者闭合其中一个,电灯都不会亮,只有两个开关都闭合了,灯泡才会亮起来。
我们将开关断开用0表示,闭合用1表示,灯泡亮用1表示,灯泡不亮用0表示,通过做实验,我们可以得到下面的结果
串联的开关 0 1
0 0 0
1 0 1
如果我们用并联的方式将两个开关连接入电路,这样两个开关都断开时,灯泡不亮,任何一个闭合或者都闭合时,灯泡就会亮起来。
通过实验,我们可以得到下面的结果:
并联的开关 0 1
0 0 1
1 1 1
由上面的实验结果,我们可以知道开关的串联相当于布尔代数的AND运算(与运算);两个开关的并联相当于布尔代数的OR运算(或运算)。
这样你当时买猫的时候,情景回顾一下:
你要一只公猫,已经绝育,白色的或者褐色的;或者是一只母猫,已经绝育了,但是不要是白色的;或者来一只黑猫就行。
店员给出表达式: (MxNx(W+T))+(FxNx(1-W))+B
店员告诉你x表示逻辑AND,+表示逻辑OR,而你知道两个开关-串联表示逻辑AND,两个开关-并联表示逻辑OR,这样可以用8个开关做出下面的电路网络:
当店员第一次拿出来 一只未绝育的褐色公猫,我们将相应的开关闭合,得到的电路网络如下:
相应开关闭合后,灯泡并没有亮起,说明这只猫不符合你的标准。
店员最后拿出一只已绝育的灰色母猫,将相应的开关闭合后,灯泡亮起:
灯泡亮起说明这只猫符合你的标准。
将实现中的问题转化为逻辑问题,又实用布尔代数来运算这个逻辑问题,最后使用电路来表达布尔代数。从这也可以看出,0和1的二进制编码,不但能用于数学计算,也能用于逻辑计算。如果能够理解这个转化过程,我们探索计算机的步伐又前进了重要的一步。