导读:
用这句话描述计算机在好不过:
道生一,一生二,二生三,三生万物。
简介:
离第一次看这本书已经有10个月左右的时间了, 特意买了纸质版从新读了一遍,关于编码的意义又变得更加明确了。 书中由浅入深的介绍了计算机的发明创造过程,印象最深的就是继电器与振荡器, 也正是 振荡器与 继电器 构成了计算机的基石。通过线路间的串联与并联构建能够模拟构建布尔代数 从而实现了电路的数字化, 而其中最重要的人物便是香农,当然还有另外两个人物 邱奇 与 图灵 书中并未做过多介绍。
脉络:
在我看来书中已经将脉络划分的很好了,然后我也并不认为我能够在将脉络进行更好的划分,所以严格的来说不应称其为脉络也许用——“读书之后的印象的链接”来形容更好一些。
我对这些印象做了一个简单的梳理:
布尔代数->电路->布尔代数与电路的结合->编码
以下内容可以略过
关于上面的内容(布尔代数->电路->布尔代数与电路的结合->编码)我并不能进行一个详细的阐述,所以我们从实用的目的,带着问题出发,只用我们需要的:
小明去超市买糖,说:"阿姨我要苹果味的糖或带印有喜洋洋的草莓味的糖"
让我们用符号对上面的话进行代指(替换)
首先让我们用下面的符号代指物品:
p :苹果味
t :糖
x :喜洋洋
c :草莓味
接着用下面的符号代指关系:
* :必须同时满足
+ :至少满足一个
() :括号内的内容是一个整体
然后对对话进行精简:
苹果味的糖或带印有喜洋洋的草莓味的糖
最后用刚才的符号对精简后的对话进行描述:
(p*t)+(x*c*t)
场景1.超市阿姨拿过来一个印喜洋洋的菠萝味的糖:
我们发现它有三个条件与式子中+右面的部分的条件的个数相同
x*c*t
然后做一个简单的比较
t与糖相同
x 与 喜洋洋相同
c与菠萝味不同
因为是*所以它们之间的关系必须同时满足,而c并没有满足,所以不满足条件,小明没有要
场景2.超市阿姨拿过来一个印喜洋洋的草莓味的糖:
我们发现它有三个条件与式子中+右面的部分的条件的个数相同。
x*c*t
然后做一个简单的比较
t与糖相同
x 与 喜洋洋相同
c与菠萝味相同
因为是*所以它们之间的关系必须同时满足,所以满足条件,小明要了。
一.布尔代数
然后上面的例子和计算机又有什么关系呢?
让我们来看看用布尔代数的一些介绍(部分):
最简单的布尔代数只有两个元素0和1,并通过如下规则定义:
它应用于逻辑中,解释0为“假”,1为“真”,∧为“与”,∨为“或”,¬为“非”。涉及变量和布尔运算的表达式代表了陈述形式,两个这样的表达式可以使用上面的公理证实为等价的,当且仅当对应的陈述形式是逻辑等价的。
有了上面的介绍,然后可以用布尔代数对上面的例子 “(p*t)+(x*c*t)” 进行重写:
用∧代替* ,用∨代替+ ,可以得到:
(p∧t)∨(x∧c∧t)
将场景1进行代入:
p 苹果味不存在 为假 =0
t与糖相同 为真 =1
x 与 喜洋洋相同 为真 =1
c与菠萝味不同 为假 =0
=(0∧1)∨(1∧0∧1)
=0∨0
=0
结果为假所以小明没有要。
将场景2进行代入:
p 苹果味不存在 为假 =0
t与糖相同 为真 =1
x 与 喜洋洋相同 为真 =1
c与菠萝味相同 为真 =1
=(0∧1)∨(1∧1∧1)
=0∨1
=1
结果为真所以小明要了。
二.电路
有了布尔代数还是不够,我们要怎样在电路中表示这种关系呢?
首先我们先了解一下电路的链接方式:
电路的链接有两种方式——串联和并联。在串联电路中只要有一个断开,整个电路意味着都断了。在并联电路中只要有一个闭合,电路就是通的。
(如果有配图效果会更好。。。自己画个丑图)
图中每个电路中有两开关根据开关的闭合和断开可以有四种不同的状态 其值如下表:
然后对照图1与图3是不是有什么发现呢?
图1中的或运算可以用图2中的并联的方式来表示,图1中的与运算可以用图2中的串联的方式来表示。
三.布尔代数+电路
这是布尔代数的一小步,也是电路的一小步,但是数字化电路的一大步
现在最关键的一步就是将布尔代数(p∧t)∨(x∧c∧t)用电路来表示(用断开表示0,用闭合表示1),然后以灯泡亮了表示满足条件否则不满足。
将场景1进行代入(省略中间步骤):
(p∧t)∨(x∧c∧t) = (0∧1)∨(1∧0∧1)
灯泡没有亮,不满足条件,小明没有要。
将场景2进行代入(省略中间步骤):
(p∧t)∨(x∧c∧t) = (0∧1)∨(1∧1∧1)
灯泡没有亮,满足条件,小明要了。
四.编码
什么是编码?
用一组数据代指另一组数据,并能够知道代指的数据是什么,在刚开始我们用 p来表示苹果,t来表示糖,这就是我们自己定义的编码,在用电路对布尔表达式重写后我们用灯泡的亮与否表示是否满足条件这也是我们自己定义的编码,但如果我用t来表示糖,你用t来表示桃子,就会出现混乱,因此需要避免这种情况,我们两个可以用同一套编码用t1来表示糖t2表示桃子,这样就不会有问题了,但是别人如何知道t1是糖,t2是桃子呢,于是我们大家坐下来重新制定一套属于我们大家的编码。
维基百科上是这样定义的:
编码是信息从一种形式或格式转换为另一种形式的过程。解码,是编码的逆过程
总结
其实最关键的继电器我并没有讲到, 而通过继电器实现的反向器与缓冲器是构建整个计算机的关键之所在,然后书中的内容真的非常好,可以更加深入的了解计算机的构造与原理,十分适合当做入门书来看,这读完之后还有一些地方理解的不够透彻 比如 RAM的实现 不过相比于第一次看这本书的理解程度还是有些进步的,在过年的这段时间内也会从新将一些概念重新梳理一下,再次进行拜读。
最后以 00生01, 01生10, 10生11, 11生00 作为结尾