【讀書筆記】《編碼:隱匿在計算機軟硬件背后的語言》01 邏輯與開關
- 前言
- 01 邏輯與開關
前言
??我是一名光學工程專業研二的學生,目前正處于找工作的階段,根據往年師兄師姐找工作的情況,在西安這個城市不出意外我能找到的應該就是嵌入式崗位了,所以我開始想辦法提升自己在這方面的知識水平,以此來應對八九月份的秋招。本科階段我學過模電、數電、微機原理、單片機等基礎課,但本科階段懂得都懂,只要不掛科就行,所以對嵌入式這方面的知識也只停留在表面,比如問我什么是CPU、寄存器等等和計算機相關的問題,我一時半會兒還真的回答不上來。
??于是,我開始學習計算機相關的知識,在機緣巧合下我讀到了這本書,這本書沒有晦澀難懂的專業術語,作者用豐富的想象和清晰的語言表達將計算機的發展過程和原理一步步展現在我的面前,通過通俗易懂的方式,從基礎的編碼概念逐步深入到計算機的軟硬件原理,這讓我在閱讀過程中逐漸把本科階段乃至高中物理學到的一些知識串聯在一起,讓我受益匪淺,所以我忍不住想記錄一下里面引發我思考的精彩內容,這也算是我做的一個讀書筆記,讓我以后也能方便直觀的回顧。
01 邏輯與開關
??前幾章通過摩斯電碼、布萊葉盲文、繼電器等實例,引入了二進制數和用繼電器充當開關的概念,即二進制數1和0分別對應開關的打開和關閉的狀態。這里我們就不寫前幾章的內容了,主要寫讓我覺得好玩的部分。
??這一部分作者先引入了布爾代數的知識:通常用字母來表示具體的物體(類/集合),然后對這些具體的類進行邏輯運算。
??舉個例子:
??我們可以用M代表公貓,F代表母貓,T可以代表褐色的貓,B可以代表黑貓,W代表白貓,O代表不在T、B或W集合中的其他顏色的貓,字母N來表示已被絕育的貓,字母U表示未被絕育的貓。這些字母用來表示有特定特征的貓的群體。
??布爾代數中,有時用符號“∪”(并集)和“∩”(交集)來代替“+”和“×”(在概率論中我也學過)。這里我們能復習一個知識就是“或”(or)=并 (+)、“和”(and)=交(×)
??顯然通過 M + F = T + B + W + O = N + U = 1 M+F=T+B+W+O=N+U=1 M+F=T+B+W+O=N+U=1可以表示所有貓的集合。
??特別注意的是:傳統代數的交換律、結合律和分配律在布爾代數中同樣成立。而且在布爾代數中,加法還可以來分配乘法,但在傳統的代數中,這是不成立的:
W + ( B × F ) = ( W + B ) × ( W + F ) W+(B×F)=(W+B)×(W+F) W+(B×F)=(W+B)×(W+F)
白貓和黑色母貓的并集=白貓和黑貓的并集和白貓和母貓的并集。
??如果我們去寵物店買貓,要求:“一只公貓,已絕育的,白色或褐色都可以,或者一只母貓,也要是已絕育的,除了白色任何顏色都可以;或者,只要是黑貓“就可以用以下公式表示:
( M × N × ( W + T ) ) + ( F × N × ( 1 ? W ) ) + B (M×N×(W+T))+(F×N×(1-W))+B (M×N×(W+T))+(F×N×(1?W))+B
??用公式表達的好處是,我們就可以做一個布爾測試了。為了避免麻煩,這里,字母可以用數字來賦值。我們只用數字0和1。數字1代表YES, True,即這只貓是符合這樣的標準的。數字0表示NO, False,即這只貓不符合這種特定標準。
??如果店員拿了一只未絕育的褐色公貓,替換后的公式: ( 1 × 0 × ( 0 + 1 ) ) + ( 0 × 0 × ( 1 ? 0 ) ) + 0 = 0 (1×0×(0+1))+(0×0×(1-0))+0=0 (1×0×(0+1))+(0×0×(1?0))+0=0,因此這只貓不符合要求。
??店員隨后拿出了一只已絕育的灰色母貓,替換后的公式: ( 0 × 1 × ( 0 + 0 ) + ( 1 × 1 × ( 1 ? 0 ) ) + 0 = 1 (0×1×(0+0)+(1×1×(1-0))+0=1 (0×1×(0+0)+(1×1×(1?0))+0=1,這說明這只小貓符合咱們的要求可以帶回家了!
??值得注意的是,我們剛剛的一系列做法把我們的抽象文字用具體的公式和數字表達出來了,但這樣做每次我們還需要代入數字0和1計算最終結果,還是不夠直觀。
??有沒有什么方法可以直觀展示結果呢?
??這時我們突發奇想,是否可以通過連通開關和燈泡的方法來確定某類貓咪是否符合我們的標準呢?
??讓我們嘗試設計一個幫助顧客挑選心儀貓咪的電路吧!
??在初中物理課,我們學過串聯電路和并聯電路,我們可以說0代表“開關斷開”?,1代表“開關閉合”?,一個燈泡有兩種狀態,0代表“燈泡不亮”?,1代表“燈泡亮”?。我們可以用真值表表示燈泡的亮滅與開關的關系。
??兩個開關串聯相當于布爾代數中的AND運算。
??兩個開關并聯相當于布爾代數中的OR運算。
結合上面初中的物理知識(“和”(and)=交(×)=串聯、“或”(or)=并 (+)=并聯),如下圖所示,剛剛我們對于貓咪的要求就可以用電源、開關和燈泡來做一個電路了:
“一只公貓,已絕育的,白色或褐色都可以,或者一只母貓,也要是已絕育的,除了白色任何顏色都可以;或者,只要是黑貓” ( M × N × ( W + T ) ) + ( F × N × ( 1 ? W ) ) + B (M×N×(W+T))+(F×N×(1-W))+B (M×N×(W+T))+(F×N×(1?W))+B
此時如果店員拿出一只已絕育的灰色母貓,我們只需要閉合和打開對應的開關。
燈泡被成功點亮了,表明這只貓符合顧客的全部要求。
作者在這章最后說到:“然而,在19世紀,沒有人將布爾代數中的AND和OR同線路中的開關串聯及并聯關聯到一起”,但我們居然做到了,這也太有趣了!