編碼:隱匿在計算機軟硬件背后的語言 筆記

[TOC]


1.至親密友

1.1 編碼是什么?

  • 一種用來在機器和人之間傳遞信息的方式
  • 編碼就是交流

1.2 生活中的編碼方式:

  • 聲音
    對任何能聽見我們的聲音并理解我們所說的語言的人來說,我們發出的聲音所形成的詞語是一種可識別的編碼.
  • 書面語
  • 手語
    聾啞人

1.3 為什么需要各種不同的編碼?

我們使用各種不同的編碼來為我們自己的交流服務,因為有些編碼有時比其他編碼更便捷.
如果一種編碼可以用在其他編程無法取代的地方,那么它就是一種有用的編碼.

1.4 那么人類如何與計算機溝通?

不同類型的信息需要它們各自的編碼.

1.5 如何增加溝通效率?

縮減編碼的數字為2.

為了使編碼發送的速度最快,你可以把

  • 莫爾斯編碼口語版把講話內容縮減到只剩下2個聲音.
  • 文字簡化成點和劃

事實上,兩個不同的事物,只要經過適當的組合,就可以表示所有類型的信息.


2.編碼與組合

2.1 發展史:

莫爾斯編碼其實是伴隨著電報機的問世而被發明的。
正如通過研究莫爾斯碼我們可以很方便地理解編碼的本質一樣,通過電報機來了解計算機硬件也是個不錯的途徑。

2.2 莫爾斯碼可以表示的字數:

點和劃的組合可以表示任何你想要的任意數目的碼字。

2.3 二進制碼:

莫爾斯碼也被稱作二進制碼(Binary Code),因為這種編碼的組成元素只有兩個————“點”和“劃”。
類似硬幣,只有正反面。
二元對象(like硬幣)和二進制碼(like莫爾斯碼)常常使用2的乘方來進行描述

2.4 組合分析

關于二進制編碼的分析工作,其實是數學的一個分支,稱作“組合學”或“組合分析”。
傳統意義上來說,因為組合分析涉及類似像扔硬幣,擲骰子等需要對其組合數目進行推算的問題,所以它經常被應用到概率統計學中。


3.布萊葉盲文與二進制碼

3.1 布萊葉盲文是什么?

3.2 布萊葉盲文特點?

數字標示符取消“數字標示狀態”字母標示符,改變了后面編碼的意義(字母->數字,數字->字母)。

這些編碼通常被稱為“優先碼”(precedence codes)或者”換擋碼“(shift codes)。它們改變作用域內編碼的含義,直到作用域結束

代碼大全2 里面有提到作用域,作用域就像變量在程序中的知名度

逃逸碼(escape codes) :讓你“逃離”對編碼串單調的,一成不變的解析,而轉入一種新的解析方式中。

3.3 盲文與Binary Code有啥聯系?

盲文中的點碼都是二進制的。一個單獨的點不是平的就是凸起的。


4.手電筒的剖析

4.1 一些原理:

  • 研究電流工作原理的、最主流的科學理論叫做“電子理論”,這套理論認為電流是由電子的運動而產生的。
  • 電流產生的原因:一個原子中電子的數目一般情況下與質子數目相同。但在某些情況下,電子可能從原子中脫離。
  • 電路中,某原子所含有的一個電子逃逸到它相鄰的下一個原子中,與此同時,這個原子又從相鄰的上一個原子中獲取一個電子,而失去電子的原子又會從與其相鄰的一個原子獲得電子,如此循環,電路中的電子不斷地從一個原子移動到下一個原子,就形成了電流。

4.2 手電筒與二進制的聯系?

  • 開關:閉合&斷開
  • 電流:有&無
  • 燈泡:亮&不亮
    就像二進制碼一樣,沒有介于兩者之間的狀態。
    二進制碼與電氣電路之間有很大的相似性。

5.繞過拐角的通信

5.1 與鄰居的微型發報系統:


使用導線,我們不僅可以構建出一個可以繞過拐角的、能夠在視角之外的發報系統,而且無需受距離的限制。我們可以跨越成千上百英里來進行通信,只需鋪足夠長的線路即可。

5.2 現實難題:如何做出很長的導線?

在150年前,人們在鋪設第一個跨越美洲和歐洲的電報系統時,這些都是面臨的問題。如果忽視了線路直徑高電壓的因素,電報線路將完全無法持續工作。
根據設計方案,系統距離跨度的極限是200英里。這個長度與紐約和加利福尼亞數千里的距離相比,還是有很大差距的。

茨威格《人類群星閃耀時》里面鋪海底電纜那個?

這個難題的解決方案——不是給手電筒,而是給“滴滴答答”的近代電報系統的————盡管它只不過是個很簡陋的裝置,但是正是基于這個裝置,整個計算機系統才被構建出來。


6.電報器與繼電器

6.1 通訊的歷史背景:

19世紀早期,人們可以進行即時通訊遠距離通信,但是不能同時做到這兩點。即時通訊受聲音傳播距離的限制,或者受視野的限制。使用信件可以進行更遠距離的通信,但是寄信耗費的時間太多,并且需要馬匹、火車或輪船。

6.2 怎么提高遠距離通訊的速度?

使用電報(telegraph,遠距離書寫)

6.2.1 電報機的原理:

在線路的這一端采取一些措施,使線路的另一端發送某種變化。

理論基礎:

  • 利用電磁現象。
  • 電磁鐵是電報機的基礎。
    在線路的一段閉合或斷開開關,可以使線路另一端的電磁鐵有所動作。

6.2.2 傳統電報機中發送信息的電鍵:

6.2.3 傳統電報機中的接收器:

6.2.4 電報機模型:

電報機的發明標志著現代通信的開始。
人們第一次能夠在視線或者聽力之外的距離范圍進行實時交流,而且信息傳遞速度很快。
更耐人尋味的是,這個發明使用了二進制碼。
但是在后來的電子和無線通信(包括電話、無線電、電視)所使用的通信模式中,二進制碼被廢棄了,
直到后來它又被應用在了電腦、光盤、數字影碟、數字衛星電視廣播和高清電視上。

6.3 怎么解決長導線帶來的大電阻的問題?

設置一個中繼系統。

6.3.1 中繼系統原始模型:

6.3.2 繼電器:

繼電器是一個意義非凡的設備。
它是一個可由電流控制的開關。
實際上,使用它,甚至可以裝配好一臺近乎完整的計算機來~

6.3.3 中繼系統最終模型:

在使用繼電器之前還要學會如何計數


7.我們的十個數字

語言只不過是一種編碼。
數字似乎并不是那么容易隨文化的不同而改變。
數字是我們平常所能接觸到的一種最抽象的編碼。

十進制系統:

大多數文明都是建立在以10為基數的數字系統上的(有時候是以5為基數)

在這個意義上,以10為基數或使用十進制數字系統完全是隨意的。

如今我們所用的數字系統通常被稱為阿拉伯數字,也可以稱為印度-阿拉伯數字系統。

阿拉伯數字系統的特點

  • 數字和位置有關:一個數字的位置不同,其代表數量也不同。
  • 沒有代表10的專門符號
  • 多了新符號“0”

十進制計數系統易于計數,但是不適用于每種情況,比如對卡通人物沒有任何意義。


8.十的替代品

8.1 八進制系統:

8.2 四進制系統:

8.3 二進制系統:


特點:

  • 二進制最大的問題就是數字用完得很快。
  • 二進制數的長度增長得很快而非數值增大得快。

通過將數字系統減少至只有0和1兩個數字的二進制數字系統,已經是最簡單的數字系統了。

二進制數字系統在算術與電子技術之間搭起了一座橋梁。

  • 電線:有電則1,無電則0

二進制數與計算機之間有著緊密的聯系。


9.二進制數:

你可以選擇很多方法來表示“是”或者“不是”。
不需要用一句話、一個單詞甚至一個字母來表達。
你需要的是一個比特,也就是只需要一個0或1即可。

就如前面提到的,十進制與其他數字系統相比并沒有什么不同,只是我們通過使用它來計數。

但是,二進制系統有特殊性:

  • 它是人們所能得到的最簡單的數字系統

9.1 bit的意義:

本義:

  • bit(比特)代表binary digit(二元數字)

一般的意義:

  • “一小部分,程度很低或者數量很少”

1bit ———— 一個二進制數字位 ———— 確實是一個非常小的量。

在計算機時代里的意義:

  • bit被看做是組成信息塊的基本單位

9.2 為什么要用二進制數來傳達信息?

二進制數不是傳達信息的唯一方法。字母、單詞、莫爾斯碼、布萊葉盲文和十進制數均可以。

關鍵

  • bit所傳遞的信息量極少
  • 1bit 是可能存在的最小的信息量,任何低于1bit內容都根本算不上是信息。

信息是指多個可能性中的一種。
所有可以被轉換成對兩種或多種可能性的選擇的信息,都可以用比特來表示。

利用二進制表示信息的一個額外的好處:

  • 我們可以清楚地知道我們是否已經想到了所有的可能性

9.3 bit在日常的體現:

通用產品代碼(UPC,Universal Product Code):



整個UPC只不過是一串95位二進制數。


9.4 bit的總結:

bit可以表示文字、圖片、聲音、音樂、電影,產品編碼、膠片速度、影評結果、英國軍隊的入侵,以及心愛之人的意圖。
但是,從根本來說,bit是數字。

在用Bit表示其他信息的時候,我們所要做的就是計算有多少種可能性。
這決定了我們需要的比特位數,以便每種可能性都可以分配到一個編號。

bit在邏輯學中也很重要。
邏輯學是哲學和數學的奇特融合,其主要目的就是確定某個陳述是真(1)還是假(0)。


10.邏輯與開關

10.1 布爾代數:

對于古希臘人而言,邏輯是追求真理的過程中使用的一種分析方法,是一種哲學形式.

而布爾認為可以找到一種數學形式來描述邏輯,因此發明了布爾代數.

布爾把代數從數的概念中抽離出來使其更加抽象
在布爾代數中,操作數不是數字而是類(class)
一個類就是一個事物的群體,后來也被稱為集合(set)

10.1.1 布爾代數的符號:

+: 表示兩個集合的并集
x : 表示兩個集合的交集
1 : 全集
0 : 空集

10.1.2 布爾代數與傳統代數的最大區別:

F x F = F

  • 布爾代數:
    母貓和母貓的交集依然是母貓
  • 傳統代數:
    該式子不成立

10.2 布爾代數與電路的聯系:

布爾代數可以用開關,導線和燈泡組成的電路來實現.

10.2.1.AND運算---串聯電路

10.2.2.OR運算---并聯電路:

10.3 歷史背景:

在19世紀,沒有人將布爾代數中的AND和OR同線路中的開關串聯及并聯關聯到一起.
甚至連計算機革命的偶像式人物查爾斯-巴貝奇也沒有,他與布爾處在同一時代并且了解布爾的工作.巴貝奇先設計了差分機和分析引擎,這些在一個世紀之后都被看做是現代計算機的前身.
其實可以根據一臺電報器來創建計算機,而非使用齒輪和杠桿來實現計算.


11.門

繼電器像開關一樣,可以串聯或并聯在電路中執行簡單的邏輯任務.
這種繼電器的組合叫做邏輯門(logic gate).

邏輯門:

邏輯門的工作方式是什么?

讓電流通過或者阻止電流通過.

布爾代數與電路的關系:

香農清晰闡述了: 電子工程師可以運用布爾代數的所有工具去設計開關電路.如果你簡化了一個描述電路的布爾表達式,那么你也可以簡化相應的電路.

每個開關都是一個二進制數.

繼電器:

  • 繼電器是什么?
    繼電器像開關一樣,可以串聯或并聯在電路中執行簡單的邏輯任務.這種繼電器的組合叫做邏輯門(logic gate)

  • 繼電器的優點:
    繼電器可以被其他繼電器所控制,而不必由人工控制.

連接繼電器是建立邏輯門的關鍵.

四種基本邏輯門

1.與門 AND:

兩個繼電器的串聯被稱為一個"與門".

  • 電路:


  • 符號:

三輸入端與門:

3個繼電器的串聯---三輸入端與門

  • 電路:
  • 符號:

2.或門 OR :

2個繼電器的并聯---或門
任何一個繼電器有電壓都可以點亮燈泡.

  • 電路:


  • 符號:



3. 或非門 NOR:

結果與或門相反

  • 符號:


  • 輸出表:

全0為1,其余為0


4. 與非門 NAND:

和與門相反

  • 符號:
  • 輸出表:

反向器(inverter):

開關閉合,燈泡就熄滅.

  • 電路:
  • 符號:
  • 作用:
    能將0(低電平)轉換成為 1 (高電平)

2-4譯碼器:

由4個與門和2個反向器連接成的電路叫做2-4譯碼器

  • 輸入:
    2個二進制位,各種組合共表示4個不同的值

  • 輸出:
    4個信號,任何時刻只能有一個是1 ,至于哪個是1取決于兩個輸入.

  • 電路:


緩沖器(buffer) :

將4個邏輯門和1個反向器組合在一起,就是原始的繼電器.
也稱為緩沖器.

  • 符號:
  • 輸入輸出:
  • 作用:
  • 輸入信號很微弱的時候,可以加強信號
  • 延遲信號(繼電器需要幾分之一秒才會被觸發 )

摩根定律:

1. 摩根定律是什么?

關于命題邏輯規律的一對法則

2. 摩根定律的表達式?

3. 兩組等價關系:

這兩組等價關系就是摩根定律在電路中的實現

4. 摩根定律與布爾代數的關系:

摩根定律是**簡化布爾表達式的一種重要手段,因此也可以用來簡化電路


12. 二進制加法器

加法是算術運算中最基本的運算,如果想搭建一臺計算機,首先就要造出可以計算兩個數的和的器件.

12.1 二進制的加法法則:


帶有前導零的形式.每個結果都是2位的值.

  • 加法位(sum bit):

  • 進位位(carry bit):
    1+1=0,進位為1

12.2. 8位加法器真實模型:


范圍:0000-0000到1111-1111 即十進制的0到255

12.3 加法器中的電路設計:

12.3.1 半加器(half adder):

  • 為什么叫半加器:
    半加器可以將2個二進制數相加,得出一個加法位和一個進位位.但是絕大多數二進制數是多與1位的.
    半加器沒有做的是: 將之前一次的加法可能產生的進位位納入下一次運算.
  • 對照:



  • 電路:


  • 符號:


12.3.2 全加器(Full Adder):

  • 電路:
  • 符號:

12.3.3 8位加法器:

  • 模型:


每個Full Adder的進位輸出都作為下一個全加器的進位輸入.

12.3.4 16位加法器:

模型:

12.3.5 優化:

  • 更快的加法器運用了被稱為"前置進位"的電路來提高運算速度.
  • 晶體管取代繼電器.

13. 如何實現減法

14. 反饋與觸發器

15. 字節與十六進制

16. 存儲器組織

17. 自動操作

18. 從算盤到芯片

19. 兩種典型的微處理器

20. ASCII碼和字符轉換

21. 總線

22. 操作系統

23. 定點數和浮點數

24. 高級語言與低級語言

25. 圖形化革命

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容