1-4章
morse編碼:
-
簡單且短促的編碼,被分配給字母表中使用頻率較高的字母。
-
先有morse編碼,再有SOS這個編碼序列。
-
解碼morse編碼時,可以通過分類的方式加快解碼的查詢(按照數量分類),之后可以根據該分類的方式畫出解碼圖。
布萊葉盲文:
- 一個碼字表示一個字母,字母與字母之間用一小塊空白隔開,單詞之間用大塊空白隔開
- 二級布萊葉盲文(帶信息壓縮):用一個碼字表示一個單詞,或者多個字母的組合。同時包括轉義字符
5-8章
電報的演進:
- 電報由發送器和接收器組成,構成一個回路,發送器通過開關控制,接收器由電磁鐵控制一只鋼筆,通過筆的彈起和落下,在紙上畫出點和划。
- 發現沒有必要畫在紙上,通過聽聲音就足夠了,彈起和落下碰撞其他物體就能發出聲音。這就是電視上看到的電報機的工作原理,通過“滴滴嗒嗒”的聲音傳遞信息
繼電器:本質是一個開關,但這個開關的閉合和斷開是由電流來控制的
表示較大的數字的時候,為什么要加逗號?讓閱讀的人馬上能知道表示的意思,而不是先判斷有多少位。給出二進制表示的時候,通過符號分隔對閱讀也有好處。
9-10章
條形碼是一串二進制數,黑色是1,白色是0,根據黑色/白色的寬度確定連續1/0的個數。它由一個數字系統符、編碼、模校驗數組成。編碼部分有左、中、右三條護線,左邊護線幫助掃描儀定位,中間護線用於校驗、右邊護線用於實現反向掃描。在左中和中右之間有多組編碼,兩個垂直條紋代表了一組編碼,一組編碼包括7個比特位,對應一個數字,7個比特位可以實現奇偶校驗。左中之間的編碼以0開頭1結尾,中右之間的編碼以1開頭0結尾,左中之間的編碼是中右之間編碼的反碼。
物品的價格不是在編碼中,而是編碼與價格有對應關系,通過檢索得到的。
11-12章
與門、或門、反向門可以通過繼電器實現,與非門(與門+反向器),或非門(或門+反向器),緩沖器(用繼電器放大信號)。與非門的等價形式是帶兩個反向輸入的或門,或非門的等價形式是帶兩個反向輸入的與門,可以用德摩根定律推出。
2-4譯碼器:輸入2個二進制位,各種組合表示4個不同的值
半加器:2個二進制數的同一位相加,和的結果可用異或門實現,進位結果可用與門實現
全加器:2個二進制數的同一位相加時,由於進位的存在,需要對3個二進制數進行加法計算。可通過2個半加器和一個或門連接而成
8個全加器可實現8位加法器,2個8位加法器級聯可得到16位加法器
13章
為什么要有反碼?
考慮十進制減法,比如253-176,直接做的話需要借位,可以通過先加后減的方式實現無需借位。原式轉化為253-176+999+1-1000,先做999-176,再做剩下的。如果是176-253,這樣轉化后還是需要借位,可以轉化為176-253+999-999,先做999-253,再加上176,最后讓999-前面的結果,加上負號就是最終的結果。
對於二進制減法,比如把上面的式子轉化為二進制減法,可以轉化為11111101-10110000+11111111+1-100000000,其中11111111-10110000的結果就是對10110000取反。如果是176-253,也是類似的思路。反碼就是為了服務無符號減法
為什么要有補碼?
補碼是一個循環的排列,比如我們要表示-500~499之間的數,可以用0~1000來表示,而無需引入負號。排列為500, 501,..., 998, 999, 000, 001,..., 498, 499。其中500代表-500,501代表-499,999代表-1,999+1后將溢出位舍去變為0。
三位負數轉化為10的補碼,只需要用999減去它再加上1。再用999減去結果后加上1,可得到負數對應的正數。
對於二進制來說,負數轉化為2的補碼,即用最大值減去它,而這等價於它的反碼,然后結果加上1,這就是補碼=反碼+1的原因。
8位二進制補碼排列:10000000, 10000001, ..., 11111111, 00000000,..., 01111110, 01111111。
14章
振盪器:輸入取反作為輸出,同時輸出再次作為輸入。可以用繼電器實現,與繼電器相關的金屬簧片作為開關,簧片不斷地跳動導致電路隨之連通或斷開。
觸發器:可以保持信息,即“記住”某些信息。
- R-S觸發器,可以記住哪個輸入端的最終狀態是1。
- 電平觸發的D型鎖存器(也稱為1位存儲器),利用時鍾指示什么時候保存數據。
- 邊沿觸發器:時鍾從0跳變到1的瞬間,數據端的輸入會影響到邊沿觸發器的輸出。邊沿觸發的D型觸發器可由兩級R-S觸發器構成。
把邊沿觸發器串聯起來可以實現計數器,因為一個邊沿觸發器的輸出頻率是輸入頻率的二分之一,通過將三個邊沿觸發器串聯可實現計數16。還有更先進的計數器是並行(同步)計數器,它的所有輸出是在同一個時刻改變的。
16章
在RAM中,地址是按照字節划分的。計算機指令包括操作碼、操作地址。一般操作碼后面跟着操作地址(Halt操作碼表示停止,因此后面不跟操作地址),通過操作地址找到操作數。
機器語言是能夠被處理響應的操作碼(比如Load指令的代碼是10h)。
匯編語言是全數字的機器語言和指令的文字描述的一種結合體(Load指令記為LOD,使用方式為LOD A, [1005h],表示把1005h地址的字節加載到累加器中)。匯編指的是將匯編語句轉換成對應的機器語言。
18章
操作系統是32位,表示處理器數據通路寬度只有32位,每次做加、減運算時,它只能處理32位二進制數。如果二進制數是64位,那么需要分成高字節和低字節兩部分,再進行操作。
21-25章
計算機上有多個電路板,電路板之間通過總線(bus)通信。可以認為總線是數字信號的集合,包括地址信號、數據輸入信號、數據輸出信號、控制信號。
直接存儲器訪問(Direct Memory Access,DMA)。通常情況下,所有讀寫內存的操作都是由CPU來完成的,但采用了DMA后,其他設備可以不通過CPU而獲得總線的控制權,進而直接對內存進行讀寫。
二進制文件占用空間比文本文件占用空間少的原因:假設要保存100這個數,在二進制文件中保存為100對應的二進制,一個字節就夠了;而在文本文件中保存為1、0、0這三個ASCII對應的二進制,需要三個字節。
定點數:小數點的位置總是在數的某個特定位置,比如位於兩位小數之前。如果程序用到的數字不會大到超過預定的存儲空間,並且這些數的小數位不會很多,那么使用定點數是一個很好的選擇。可以用於精確的小數計算。
浮點數:通過使用指數使得小數點的位置不固定的。分為4個字節的單精度和8個字節的雙精度格式。
-
單精度:【s=1位符號位】+【e=8位指數】+【f=23位有效數】。因為規范化的有效數的小數點左邊有且僅有一個1,因此在IEEE浮點數標准中沒有為這一位分配存儲空間,23位存儲的是有效數的小數部分。因此精度是24位。8位指數部分的取值范圍是0~255,稱為偏移指數,需要減去偏移量127。
如果e的取值范圍是1~254,則對應的小數為 \((-1)^s * 1.f * 2^{(e-127)}\)。
如果\(e=0\)且\(f=0\),則該數為0。
如果\(e=0\)且\(f\neq0\),則該數是合法的,但不是規范化的。這類數可以表示為\((-1)^s * 0.f * 2^{-127}\)
如果\(e=255\)且\(f=0\),則該數為無窮大或者無窮小,取決於符號位s的值。
如果\(e=255\)且\(f\neq0\),則該數被解釋為“不是一個數”(NaN),用來表示未知的數或非法操作的結果。
單精度浮點數的精度為 \(\frac{1}{2^{24}} = \frac{1}{16777216}\) ,這意味着16777216和16777217將表示成同一個數,且處於這兩數之間的所有數都將被表示為同一個數。
-
雙精度:【s=1位符號位】+【e=11位指數】+【f=52位有效數】。如果e的取值范圍是1~2046,則對應的小數為 \((-1)^s * 1.f * 2^{(e-1023)}\)。其他情況和單精度的規則相同。精度為\(\frac{1}{2^{53}} = \frac{1}{9007199254740992}\)。
無損壓縮和有損壓縮的區別:無損壓縮指壓縮過程可逆,從壓縮文件中恢復原文件;有損壓縮過程是不可逆的,在壓縮過程中丟棄了部分原始數據。