1. 程式人生 > >2018-2019-1 20189215 《深入理解計算機系統》第二章學習總結

2018-2019-1 20189215 《深入理解計算機系統》第二章學習總結

《第2章 資訊的表示和處理》


研究三種最重要的數字表示:無符號編碼、補碼編碼、浮點數編碼。

教材學習內容總結

2.1 資訊儲存
大多數計算機使用的8位的塊,或者位元組(byte)作為最小的可定址的儲存器單位,而不是儲存器中訪問單獨的位。機器級程式將儲存器視為一個非常大的位元組陣列,稱為虛擬儲存器。儲存器的每個位元組都由一個唯一的數字來標識,稱為它的地址,所有可能地址的集合稱為虛擬地址空間。
2.1.1 十六進位制表示法
一個位元組由8位組成.二進位制表示法中值域是00000000~11111111,十六進位制使用數字’0’~’9’以及字元’A’~’F’來表示16個可能的值,一個位元組的值域為00~FF。
2.1.2 字資料大小
每臺計算機都有一個字長,指明整數和指標資料標稱大小。字長決定的最重要的系統引數就是虛擬地址空間的最大大小。“32位程式”或“64位程式”的區別在於該程式是如何編譯的,而不是其執行的機器型別。
使用確定大小的整數型別是程式設計師準確控制資料表示的最佳途徑。
2.1.3 定址和位元組順序
小端法和大端法:

  • 小端法——最低有效位元組在最前面的方式
  • 大端法——最高有效位元組在最前面的方式

2.1.4 表示字串
在使用ASCII碼作為字元碼的任何系統上,表示的結果是相同的,與位元組順序和字大小規則無關。因此,文字資料比二進位制資料具有更強的平臺獨立性。
2.1.5 表示程式碼
不同的機器型別使用不同的且不相容的指令和編碼方式,二進位制程式碼是不相容的,二進位制程式碼很少能在不同機器和作業系統組合之間移植。
2.1.6 布林代數簡介
二進位制值是計算機編碼、儲存和操作的核心,所以圍繞數值0和1的研究已經演化出了豐富的數學知識體系。
四種邏輯運算:~ 非(NOT)、& 與(AND)、| 或(OR)、^ 異或(EXCLUSIVE-OR)。
2.1.7 C語言中的位級運算
C語言一個很有用的特性就是它支援按位布林運算,確定一個位級表示式的結果的最好的方式,就是將十六進位制的引數擴充套件成二進位制表示並執行二進位制運算,然後轉回十六進位制。
2.1.9 C語言中的邏輯運算.
C語言還提供了一組邏輯運算子||(OR)、&&(AND)和!(NOT)。
2.1.10 C語言中的移位運算
C語言還提供了一組移位運算,以便向左或向右移動位模式。右移運算x>>k,左移運算x<<k。
左移運算——x向左移動k位,丟棄最高的k位,在右端補k個0。
右移運算分為邏輯右移和算數右移。

  • 邏輯右移——在左端補k個0。
  • 算術右移——在左端補k個最高有效位的值。

2.2 整數表示
2.2.1 整型資料型別
C語言支援多種整型資料型別—–表示有限範圍的整數。每種型別都能用關鍵字來指定大小,如:char、short、long或者long long。
不同大小的分配的位元組數會根據機器的字長和編譯器有所不同。
根據位元組分配,不同的大小所能表示的值的範圍是不同的。
2.2.2 無符號數的編碼
無符號的二進位制表示有一個很重要的屬性,就是每個介於0~(2的w次方)-1之間的數都有唯一一個w位的編碼值。
2.2.3 補碼編碼
最常見的有符號數的計算機表示方式就是補碼形式。在這個定義中,將字的最高有效位解釋為負權。
每個介於-2的(w-1)次方和(2的w次方)-1之間的整數都有一個唯一長度為w的位向量二進位制表示。
2.2.4 有符號數和無符號數之間的轉換
C語言允許在各種不同的數字資料型別之間做強制型別轉換。
2.2.5 C語言中的有符號數與無符號數
C語言支援所有整型資料型別的有符號和無符號運算。雖然C語言標註沒有指定有符號數要採用某種編碼表示,但是幾乎所有的機器都使用補碼。
C語言允許無符號數和有符號數之間的轉換,轉換的原則是底層的位表示保持不變。
2.2.6 擴充套件一個數字的位表示
零擴充套件——將一個無符號數轉換為一個更大的資料型別,簡單地在表示的開頭新增0。
符號擴充套件——將一個補碼數字轉換為一個更大的資料型別,在表示中新增最高有效位的值。
2.2.7 截斷數字
在一臺典型32位機器上,當把int x(x = 53191)強制型別轉換為short時,就將32位的int截斷為16位的short int。這個16位的位模式就是-12345的補碼錶示。當把它強制轉換回int時,符號擴充套件把高16位設定為1,從而生成-12345的32位補碼錶示。
2.3 整數運算和2.4 浮點數介紹了各種計算的公式,分別是無符號加法、補碼加法、補碼的非、無符號乘法、補碼乘法、乘以常數、除以2的冪、浮點運算等,在這裡就不摘抄書本啦。
2.4.2 IEEE浮點表示
IEEE浮點標準用V = (-1)^s × M × 2^E的形式來表示一個數:

  • 符號——s決定這數是負數(s = 1)還是正數(s = 0),而對於數值0的符號位解釋作為特殊情況處理。
  • 尾數——M是一個二進位制小數,它的範圍是1~2-ε,或者是0~1-ε。
  • 階碼——E的作用是對浮點數加權,這個權重是2的E次冪(可能是負數)。

教材學習中的問題和解決過程

  • 問題1:浮點數規格化的值,特殊值或者是錯誤的值怎麼處理。
  • 問題1解決方案:此時OS會把符號位、尾數、階碼全都變為0。
    當階碼都為1的時候,如果尾數全為0,那麼就要看符號位,如果符號位為1,那麼就是負無窮;如果符號位為0那麼就是正無窮。
    當尾數不是0的時候,不是一個有效的數字,用NaN(not a number)來代替。

  • 問題2:涉及到運算的公式理解不深刻,公式與計算對不上。
  • 問題2解決方案:沒記住各種符號的表示,比如B2T(w位數是下標)是二進位制轉不碼,首先要記住每種符號代表的含義,再多思考、練習公式。

其他

《深入理解計算機系統(第三版)》第二章對我以前所學的知識做了補充與深化,也引起了我對之前知識的一些思考,但是內容太多,對於很多概念性的公式和概念沒有很深入的理解掌握,需要花更多時間來真正做到“深入理解”。

學習進度條

章節數(新增/累積) 部落格量(新增/累積)
目標 共12章 共12篇
2018.11.04 1/1 1/1

計劃在本學期讀完,希望自己可以做到。

參考資料