1 前言
??本文是基于《編碼》、《穿越計(jì)算機(jī)的迷霧》兩部著作進(jìn)行讀后整理的記錄性博客侧漓。對(duì)書中較為重要的內(nèi)容進(jìn)行歸納整理進(jìn)行二次創(chuàng)作培愁,略去了繁瑣的講述細(xì)節(jié),力求簡(jiǎn)明扼要绎谦。
編碼:一種由若干符號(hào)和規(guī)則組成的系統(tǒng)管闷,用來(lái)向計(jì)算機(jī)表述指令。
2 正文
2.1 信息的傳遞
??日常生活中窃肠,我們可以通過(guò)語(yǔ)言與其他人進(jìn)行交流包个,這種基于語(yǔ)言的信息的傳遞是建立在雙方都能明白語(yǔ)言背后的含義。這對(duì)應(yīng)著一整套約定俗成的語(yǔ)言體系冤留,講述者和傾聽者對(duì)話語(yǔ)背后的含義有著一致的 “共識(shí)”碧囊。比如,為什么用 10 來(lái)代表某個(gè)物體的數(shù)目搀菩,為什么不用其他符號(hào)呕臂?原因就是你用其他符號(hào)在別人不知道這個(gè)符號(hào)的情況下,你們之間是無(wú)法進(jìn)行有效溝通肪跋,也即缺乏 “共識(shí)”。編碼在本文指的是一種用來(lái)在機(jī)器和人之間傳遞信息的方式土砂。
??人和計(jì)算機(jī)能不能和人與人之間一樣進(jìn)行有效的溝通呢州既?考慮一下人與人之間進(jìn)行溝通交流的前提是雙方都能較為準(zhǔn)確地理解各自語(yǔ)言中的具體含義。對(duì)任何能聽見我們的聲音并理解我們所說(shuō)的語(yǔ)言的人來(lái)說(shuō)萝映,我們發(fā)出的聲音所形成的詞語(yǔ)是一種可識(shí)別的編碼吴叶。那么人和計(jì)算機(jī)之間也一樣,我們可以和計(jì)算機(jī)約定一種 “溝通方式”序臂,一種雙方都能 “理解” 的 “溝通方式”蚌卤。
2.2 二進(jìn)制
??二進(jìn)制是最簡(jiǎn)單的數(shù)字系統(tǒng)实束,其中只包含兩個(gè)數(shù)字:0 和 1。和我們?nèi)粘J褂玫氖M(jìn)制的逢十進(jìn)位類似逊彭,二進(jìn)制是逢二進(jìn)位咸灿。在二進(jìn)制數(shù)字系統(tǒng)內(nèi),1+1 不在等于 2侮叮,應(yīng)為二進(jìn)制中只有 0 和 1避矢,不再和十進(jìn)制系統(tǒng)中一樣。那么 1+1 應(yīng)該等于 10囊榜,也就是逢 2 進(jìn)位审胸。當(dāng)然二進(jìn)制中的 10 和十進(jìn)制中的 10 代表的意思也是不同的。
十進(jìn)制:9 + 1 = 10
二進(jìn)制:1 + 1 = 10 逢 2 進(jìn)位卸勺,相當(dāng)于十進(jìn)制里的 2
??盡管二進(jìn)制記數(shù)法只有兩個(gè)符號(hào)砂沛,但是卻可以有無(wú)窮無(wú)盡的組合∈锴螅可以這么說(shuō)碍庵,任何一個(gè)十進(jìn)制的整數(shù),都有一個(gè)唯一的二進(jìn)制數(shù)與之相對(duì)應(yīng)圆到。比如怎抛,月亮和地球之間的距離是 384000 千米,對(duì)應(yīng)的二進(jìn)制數(shù)就是 1011101110000000000芽淡。
??十進(jìn)制數(shù)具有不同的數(shù)位马绝,分別是個(gè)位、十位挣菲、百位富稻、千位等,但是在二進(jìn)制里通常不需要這樣細(xì)致的劃分白胀,因?yàn)槎M(jìn)制數(shù)一般都很長(zhǎng)椭赋。對(duì)于單個(gè)的二進(jìn)制數(shù)位,它們都只有一個(gè)稱呼 “比特”或杠,每個(gè)比特具有兩個(gè)可能的值:0 或者 1哪怔。
??二進(jìn)制作為最簡(jiǎn)單的數(shù)字系統(tǒng),在日常生活計(jì)數(shù)是不太方便的向抢,畢竟同樣數(shù)目的物體用二進(jìn)制表示數(shù)字長(zhǎng)度更長(zhǎng)认境,進(jìn)位更多。但它同時(shí)也具備簡(jiǎn)單的特性挟鸠,每個(gè)比特只有兩種狀態(tài) 0 或 1叉信。這很容易和我們?nèi)粘I钪械恼媾c假、開與關(guān)聯(lián)系起來(lái)艘希。同時(shí)簡(jiǎn)單也就意味著具有較少的運(yùn)算規(guī)則硼身,較少的運(yùn)算規(guī)則也就能夠更加簡(jiǎn)便進(jìn)行設(shè)計(jì)硅急。
進(jìn)制的轉(zhuǎn)換
a) 二進(jìn)制轉(zhuǎn)換為十進(jìn)制
以十進(jìn)制為例,十進(jìn)制下的數(shù)字可以根據(jù)數(shù)位(個(gè)十百千)進(jìn)行拆分
和十進(jìn)制類似佳遂,二進(jìn)制也可以利用數(shù)位進(jìn)行拆分营袜,但需要注意的是這里的位不再是 10,而是 2
b) 十進(jìn)制轉(zhuǎn)換為二進(jìn)制
十進(jìn)制數(shù) N讶迁,記轉(zhuǎn)換成二進(jìn)制后的數(shù)為 d连茧,以 25 為例,轉(zhuǎn)換過(guò)程和二進(jìn)制轉(zhuǎn)十進(jìn)制相反巍糯,我們需要將十進(jìn)制數(shù)字轉(zhuǎn)換為:
根據(jù)上式結(jié)合輾轉(zhuǎn)相除法啸驯,那么轉(zhuǎn)換的過(guò)程為:
25 轉(zhuǎn)換后的二進(jìn)制表示法為:11001(N mod 2 從下至上開始寫)
2.3 邏輯與開關(guān)
??結(jié)合前面的二進(jìn)制我們可以將開關(guān)的斷開與閉合與二進(jìn)制進(jìn)行關(guān)聯(lián),用開關(guān)接通表示 1祟峦,開關(guān)斷開表示 0罚斗。但需要注意的是一個(gè)真正的二進(jìn)制數(shù)不僅僅只有一個(gè)比特,它可能包含了很多個(gè)比特宅楞,是一連串的 0 或 1针姿,所以要表示一個(gè)真正的二進(jìn)制數(shù),就需要一排開關(guān)厌衙,每一個(gè)開關(guān)對(duì)應(yīng)一個(gè)比特距淫。
??在中學(xué)數(shù)學(xué)中我們學(xué)習(xí)了 “與、或婶希、非”榕暇,還有與或非三種邏輯運(yùn)算符表達(dá)式計(jì)算的結(jié)果有兩種可能:真(True)或者假(False)。而這也與我們的二進(jìn)制類似喻杈,只有兩種狀態(tài)彤枢。那么我們可以利用開關(guān)的組合實(shí)現(xiàn)上述邏輯運(yùn)算符。
??在上圖所示的電路中筒饰,電路接通代表結(jié)果為真缴啡,斷開代表結(jié)果為假。結(jié)合電路知識(shí)我們可以李勇串聯(lián)開關(guān)的形式實(shí)現(xiàn) “與” 邏輯瓷们,即只有兩個(gè)開關(guān)同時(shí)接通結(jié)果才為真(電路接通)业栅,其余情況都無(wú)法接通;同樣利用并聯(lián)電路實(shí)現(xiàn) “或”谬晕,只要一個(gè)開關(guān)接通結(jié)果就為真(電路接通)式镐;至于 “非” 的實(shí)現(xiàn)直接取反即可。
2.4 門與繼電器
??通過(guò)前文我們已經(jīng)了解到了可以用開關(guān)表示邏輯固蚤,但開關(guān)有一個(gè)很大的弊端就是只能控制單一電路,能不能用一個(gè)設(shè)備來(lái)代替開關(guān)控制其他電路歹茶,同時(shí)它又能起到接通和斷開電路的作用呢夕玩?這就需要介紹一下繼電器你弦。
??在中學(xué)物理的學(xué)習(xí)中,我們了解到了電能生磁燎孟,磁也能生電禽作。如下圖所示,當(dāng)連接繼電器的電路接通時(shí)就觸發(fā)了電磁鐵揩页,電磁鐵把一個(gè)彈性金屬條吸附下來(lái)旷偿,從而接通警報(bào)電路,紅燈亮起爆侣。繼電器是一個(gè)意義非凡的設(shè)備萍程,它是一個(gè)開關(guān),但是這個(gè)開關(guān)的閉合和斷開是由電流控制的兔仰。當(dāng)然茫负,繼電器的作用不僅限于此。
繼電器和莫爾斯電碼
莫爾斯發(fā)明的是一種叫做電報(bào)的東西乎赴,由不在一個(gè)地方的兩個(gè)裝置組成忍法,用很長(zhǎng)的電線連接起來(lái),如下圖所示榕吼。
在這一端饿序,是一個(gè)開關(guān),通常稱之為按鍵羹蚣,可以控制電流的通斷原探。而在電線的那一端,連著一個(gè)電磁鐵度宦。這樣踢匣,通過(guò)按下或者松開按鍵,就能控制磁性的有無(wú)戈抄。
在電磁鐵的上方离唬,有一個(gè)長(zhǎng)長(zhǎng)的鐵片——銜鐵臂——安裝在支架上,它可以上下自由活動(dòng)划鸽。平時(shí)输莺,也就是電磁鐵沒有通電產(chǎn)生磁力的時(shí)候,它被一根彈簧拉著裸诽,以免與電磁鐵挨在一起嫂用。這樣,一旦開關(guān)閉合丈冬,銜鐵臂就會(huì)被電磁鐵吸引嘱函;當(dāng)開關(guān)松開,電磁鐵失去磁性時(shí)埂蕊,銜鐵臂又在彈簧的牽引下回到原來(lái)的位置往弓。
如果在銜鐵臂上安裝一支筆疏唾,并在筆的下面放一卷勻速前進(jìn)的紙,當(dāng)按下按鍵并迅速松開時(shí)函似,會(huì)在瞬間使電磁鐵產(chǎn)生一個(gè)吸合與釋放的動(dòng)作槐脏,結(jié)果是筆尖在紙上打出一個(gè)點(diǎn)“·”;如果按鍵按下的時(shí)間稍長(zhǎng)一點(diǎn)兒撇寞,那么顿天,筆尖會(huì)在紙上留下一條線“—”,這稱為“劃”蔑担。連續(xù)地按動(dòng)按鍵牌废,就會(huì)在紙上留下一串由點(diǎn)和線組成的圖案。
結(jié)合一張發(fā)送方和接收方都能理解的電碼表钟沛,在這張表里畔规,用點(diǎn)和劃的組合來(lái)表示從 “A” 到 “Z” 的 26 個(gè)英文字母,以及從 “0” 到 “9” 這十個(gè)數(shù)字恨统。
歷史上第一份長(zhǎng)途電報(bào)是在 1844 年 5 月 24 日發(fā)出的叁扫,這表明莫爾斯的發(fā)明已經(jīng)具備了實(shí)用性。不過(guò)畜埋,如果線路太長(zhǎng)莫绣,也會(huì)是個(gè)問題。正如我們已經(jīng)知道的那樣悠鞍,電線太長(zhǎng)对室,電阻就會(huì)變大。這樣咖祭,在電報(bào)線路的那一頭掩宜,微弱的電流將不能使電磁鐵正常吸合,電報(bào)接收機(jī)也就無(wú)法接受到信息么翰。所以牺汤,可以每隔一段距離設(shè)置一個(gè)電報(bào)中轉(zhuǎn)站,派人在那里接收電報(bào)浩嫌,然后再原樣發(fā)往另一條線路檐迟,就這樣一段一段地進(jìn)行接力傳遞。
但這種接力傳遞的方式需要耗費(fèi)人力码耐,信息的傳遞也很繁瑣追迟。解決之道是使用繼電器,如下圖所示骚腥,它的主體是一個(gè)電磁鐵敦间,不過(guò)銜鐵臂的下面多了一個(gè)金屬觸點(diǎn)。現(xiàn)在,分別從銜鐵臂和金屬觸點(diǎn)上引出兩根線每瞒,并串接一個(gè)電源金闽,把這兩根線作為另外一條電報(bào)線路架設(shè)到其他地方。注意剿骨,電源并不是繼電器的組成部分。
它應(yīng)當(dāng)被放在遠(yuǎn)離電報(bào)發(fā)送端埠褪,但還可以保證電報(bào)信號(hào)能讓電磁鐵正常吸合的地方浓利。當(dāng)發(fā)送方過(guò)來(lái)一個(gè) “·” 的時(shí)候,銜鐵臂也短暫吸合一下钞速,把另一條線路接通贷掖。
??繼電器就像開關(guān)一樣,可以串聯(lián)或并聯(lián)在電路中執(zhí)行簡(jiǎn)單的邏輯任務(wù)渴语。這種繼電器的組合叫做邏輯門苹威,也簡(jiǎn)稱門。繼電器連接的電路接通時(shí)相當(dāng)于閉合了開關(guān)驾凶,對(duì)應(yīng)前文開關(guān)閉合對(duì)應(yīng)著二進(jìn)制中的 1牙甫,類似的,繼電器電路斷開時(shí)相當(dāng)于斷開開關(guān)调违,對(duì)應(yīng)著二進(jìn)制中的 0窟哺。
??實(shí)際上,繼電器也可以如下圖所示連接在電路中技肩,當(dāng)繼電器接通電源時(shí)且轨,燈泡熄滅。這樣的話虚婿,開關(guān)閉合旋奢,燈泡就會(huì)熄滅。以這種方式連接的繼電器叫做反向器(inverter)然痊。反向器不是邏輯門(一個(gè)邏輯門通常有兩個(gè)或多個(gè)輸入)至朗,盡管如此,它的用處還是很廣玷过。反向器可以用如右的專門符號(hào)來(lái)表示爽丹。反向器能將 0(低電平)轉(zhuǎn)換為 1(高電平),反過(guò)來(lái)也是一樣的辛蚊。
??前文介紹了可以通過(guò)開關(guān)的串并聯(lián)實(shí)現(xiàn)簡(jiǎn)單邏輯電路粤蝎,同樣的繼電器也可以進(jìn)行串并聯(lián)實(shí)現(xiàn)相應(yīng)的邏輯。就像兩個(gè)開關(guān)串聯(lián)一樣袋马,這兩個(gè)繼電器也執(zhí)行了邏輯操作初澎。只有當(dāng)兩個(gè)繼電器都被觸發(fā)的時(shí)候燈泡才會(huì)亮。這樣兩個(gè)繼電器的串聯(lián)被稱為一個(gè) “與門”。
??為了避免復(fù)雜的圖示碑宴,電氣工程師用如下專門的符號(hào)表示一個(gè)與門软啼。
??與門有兩個(gè)輸入端(上圖中的左端)和一個(gè)輸出端(上圖中的右端)。與門的輸入未必一定要和開關(guān)相連延柠,而且輸出也不一定只能與燈泡相連祸挪。我們真正要處理的是輸入端的電壓和輸出端的電壓。例如贞间,一個(gè)與門的輸出可以作為另一個(gè)與門的輸入贿条,如下所示。
??如果我們將低電平視為 0增热,將高電平視為 1整以,那么與門的輸入和輸出之間的關(guān)系如下所示。
??[注]:雖然我們前面一直介紹使用電路的接通與斷開的兩種狀態(tài)與二進(jìn)制進(jìn)行關(guān)聯(lián)峻仇,但是實(shí)際并不需要一定要將電路接通或斷開公黑,只需利用可以區(qū)分的高低電平,高電平代表 1摄咆,低電平代表 0凡蚜。
??電氣工程師用如下符號(hào)表示或門。它和與門的符號(hào)稍微有點(diǎn)相似豆同,但是輸入端的一邊是弧線番刊,像英文單詞 “OR” 中字母 “O” 一樣。
??或門的兩個(gè)輸入中影锈,只要有一個(gè)加上電壓芹务,輸出就是高電平。如果將低電平看做 0鸭廷,高電平看做 1枣抱,那么或門也有四種可能的組合狀態(tài)。
??當(dāng)然我們也可以將前面的三種邏輯門進(jìn)行組合使用從而實(shí)現(xiàn)復(fù)雜場(chǎng)景下的不同需求辆床。
小結(jié)
反向器 | 與門 | 或門 |
---|---|---|
??下面再介紹兩個(gè)較為常用的邏輯門佳晶。
??結(jié)合下面的電路,我們來(lái)了解一下 “或非門”讼载。在下面這種配置中轿秧,第一個(gè)繼電器的輸出為第二個(gè)繼電器提供電源。當(dāng)兩個(gè)繼電器全都斷開時(shí)咨堤,燈泡發(fā)光菇篡。
??如果上面繼電器電路的開關(guān)閉合,燈泡就會(huì)熄滅一喘。同樣的驱还,如果下面繼電器電路的開關(guān)閉合,燈泡也會(huì)熄滅。分析上述電路的邏輯會(huì)發(fā)現(xiàn)议蟆,該電路的邏輯是:只有都為假(繼電器電路斷開)結(jié)果才為真(燈泡點(diǎn)亮)闷沥。而這正與我們前文介紹的或門的邏輯相反:
或門 | 或非門 |
---|---|
只要有一個(gè)為真結(jié)果就為真 | 只有都為假結(jié)果才為真 |
真值表
??由于這些結(jié)果恰恰與或門相反,這個(gè)門稱為 “或非門”咐容,簡(jiǎn)稱 NOR舆逃,用以下符號(hào)表示。
??除去輸出部分的小圓圈疟丙,這個(gè)符號(hào)與或門非常相像颖侄。小圓圈表示 “反向”,所以或非門也可用下面的符號(hào)表示享郊。
??下面再介紹另一種邏輯門的電路,如下所示是另一種連接兩個(gè)繼電器的方法孝鹊。
??在這種情況下炊琉,兩個(gè)輸出通過(guò)并聯(lián)的方式連接在一起,與或門的布局類似又活,但是卻采用了另一種輸出接法苔咪。燈泡在兩個(gè)繼電器電路開關(guān)全斷開時(shí)被點(diǎn)亮。
??當(dāng)上面的繼電器電路開關(guān)閉合時(shí)柳骄,燈泡依然是亮的团赏。同樣,當(dāng)只有下面的繼電器電路開關(guān)閉合時(shí)耐薯,燈泡也依然是亮的舔清。只有當(dāng)兩個(gè)繼電器電路開關(guān)全閉合的時(shí)候,燈泡才會(huì)熄滅曲初。上述電路展示了我們要介紹的另一種邏輯門——與非門体谒。分析上述電路的邏輯,我們可以發(fā)現(xiàn)該電路的邏輯是:只有都為真(繼電器開發(fā)閉合)時(shí)結(jié)果才為假(燈泡熄滅)臼婆。而這正與我們前文介紹的與門的邏輯相反:
與門 | 與非門 |
---|---|
只有都為真結(jié)果才為真 | 只有都為真時(shí)結(jié)果才為假 |
??上述電路展示的這種邏輯門被稱為與非門抒痒,或簡(jiǎn)稱 NAND。與非門的符號(hào)和與門類似颁褂,但在輸出部位多了一個(gè)小圓圈故响,意思是輸出和與門正好相反。
補(bǔ)充介紹一下緩沖器:
緩沖器(buffer)可用如下符號(hào)表示颁独。
除了輸入端的小圓圈彩届,這個(gè)符號(hào)與反向器是很相似的。很明顯奖唯,緩沖器 “沒有什么作用”惨缆,它的輸入與輸出是相同的。
緩沖器可以用于延遲信號(hào),這是因?yàn)槔^電器需要一點(diǎn)時(shí)間才會(huì)被觸發(fā)坯墨。
??如下圖所示寂汇,兩個(gè)輸入信號(hào)經(jīng)過(guò)反向器后作為與門的輸入。這樣的組合有時(shí)可以去掉反向器而畫成如下的形式捣染。
??實(shí)際上骄瓣,帶有兩個(gè)反向輸入的與門和或非門是等價(jià)的。
??類似的耍攘,帶有兩個(gè)反向輸入的或門和與非門也是等價(jià)的榕栏。
3 小結(jié)
??編碼:基礎(chǔ)篇總結(jié)了這個(gè)系列基礎(chǔ)部分的內(nèi)容,主要是思想的介紹蕾各,幫助讀者建立相應(yīng)的思維方式扒磁,后續(xù)會(huì)結(jié)合本文的內(nèi)容進(jìn)行后續(xù)部分的書寫。為了精簡(jiǎn)內(nèi)容刪減了部分較為詳細(xì)的書寫式曲,僅作為整理總結(jié)妨托。