2017-2018-1 20179215 《深刻理解計算機系統》第二章

《深刻理解計算機系統》第二章學習筆記

 這章主要經過四個部分進行介紹:信息存儲、整數表示、整數運算以及浮點數。重點描述了無符號數和數的補碼的表示特性。咱們要知道對計算機的算術運算有深入的理解是寫出可靠程序的關鍵,好比算術溢出就是形成程序錯誤和安全漏洞的一個常見根源。

1、信息存儲

1. 二進制與十六進制:

 1)十六進制數字:0 – F,例子:173A4C

 2)二進制數字:0 – 1,例子:0001 0111 0011 1010 0100 1100

 3)相互轉換:3位二進制數組成1位八進制數,4位二進制數組成1位十六進制數。十進制→ 十六進制:Mod(10,16)(倒序排列)

2. 字和數據大小:

 1)字長決定了系統虛擬地址空間的最大大小,對於典型32位機器而言,虛擬地址範圍爲0 - 2^32-1,程序最多訪問2^32,因此32位機器支持最大內存爲4G。

 2)通常數據類型的字節數,重點爲指針類型的字節數爲全字長。

3.尋址和字節順序:

 分爲大端法和小端法,IBM和Sun的我的計算機一般使用大端法。

4.布爾代數與位級運算:

 1)基本位運算符:|(邏輯或),&(邏輯與),~(邏輯非),^(邏輯異或)

布爾運算:數組

位及運算:
安全

 2)重要結論:a^a = 0(經過異或交換兩個變量的值)

5. 移位運算及其重要結論:

2、整數表示

 主要是對、無符號數、補碼的編碼,以及有符號數與無符號數之間的轉換,截斷數字進行了講解。

1.無符號數的編碼

2.補碼的編碼

3.有符號數與無符號數之間的轉換

1)補碼轉換爲無符號數

2)無符號數轉換爲補碼

注:開始對這幾個名詞有混淆,但後來清楚有符號數是與無符號數相對應,而有符號數包括原碼、補碼、反碼三種,有符號數均由符號位+數值位組成,符號位1表明負數,0表明正數,正數的補碼與原碼相同;負數的補碼求十進制值就是按照正常二進制轉換成十進制的求法,只不過最高位表明-1乘,那麼已知十進制負數求其補碼,除了用公式外,還能夠用簡便方法計算,及初符號位外,其他位取反加1,最後加上負號便可。

相應練習題:

關於有符號數和無符號數轉換出現的問題:某些因爲隱式強制類型轉換和無符號數據類型形成的細微錯誤

 可看出由於參數length是無符號數的,計算0-1使用無符號運算,結果是UMAX,那麼致使判斷結果總爲真,所以代碼將試圖訪問數組a的非法元素。

3、整數運算

 主要是對無符號數的加法、補碼加法、補碼的非、無符號乘法以及補碼乘法進行了講解。

1.無符號數的加法:

重要結論:模數加法造成了阿貝爾羣,可交換結合,每一個元素都有一個加法逆元。

2.補碼乘法:

重要結論:設爲二進制表示的無符號整數,對於任意k0,有如下公式:即:一個二進制表示數乘以,至關於在位模式右邊補了k個0(不溢出的狀況),至關於一種移位操做,C表達式中x << k等價於 x * pwr2k,許多C語言編譯器視圖以移位,加法和減法的組合來消除不少整數乘以常數的狀況。例如:x*14,利用等式14=,編譯器將乘法重寫爲(x<<3)+(x<<2)+(x<<1),實現將一個乘法替換爲三個移位運算和三個加法,減小時鐘週期提升運算效率。

4、浮點數

1.二進制小數

2.IEEE浮點表示:

  • 符號:s經過其值1負和0正決定V的正負,對於V=0另做解釋。
  • 尾數:M是一個二進制小數,它的範圍是1 – 2-ε,或者0 – 1-ε
  • 階碼:E的做用是對浮點數加權,權重是2的E次冪(多是負數)學習

    經過將浮點數的位劃分爲3個字段,分別進行編碼,相似科學計數法。

  • 1個單獨的符號位s,直接編碼符號s
  • k位的階碼字段,exp=ek-1···e0,編碼解碼E
  • n位的小數字段,frac=fn-1···f0,編碼尾數M,可是該值依賴於E是否爲0編碼

3.浮點表示的三種狀況:

一、 規格化的值

 廣泛狀況,當exp不全爲0,也不全爲1,此狀況解碼以偏置形式表示有符號整數,即E = e – Bias,e是無符號數,e表示爲階碼位的編碼ek-1···e0,而Bias是一個等於(單精度k=8,雙精度k=11)的偏置值,由此產生指數的取值範圍即:(單精度-126~+127,雙精度-1022~+1023),對於frac解釋爲描述小數值f,期中0≤f<1,其二進制表示爲0.fn-1···f0,當尾數定義爲M = 1+f時,叫作隱含以1開頭的表示,因此M = 1.fn-1···f0,由於二進制的基數是2,且咱們總能在不溢出的範圍內調整階碼,使得尾數M的範圍總在1≤M<2中,符合IEEE定義M的範圍,從而表示小數。

二、 非規格化的值

 當階碼exp域全0,階碼值爲E = 1-Bias,而尾數值爲M = f,不包含隱含開頭都 1,非規格化的值用來表示0和很是接近0的小數,由於規格化要求M≥1,因此沒法表示0,實際上+0.0的浮點表示位模式全0,而當符號位爲1時候獲得-0.0,逐漸溢出的屬性使得數值均勻的接近0.0。

三、 特殊值

 當階碼exp域全1,當frac全0表示無窮,根據符號位的表示的正負來肯定正負無窮,無窮能表示溢出的結果,當小數域非零時,NaN被稱爲不是一個數的縮寫,一些運算結果爲虛數,沒法表示。

總結:

 這章重點在於對於補碼的使用上,而難點在於對浮點數的理解上。而且算術溢出可能致使的程序錯誤及安全漏洞在練習題中也有例子說明,須要咱們好好理解。

相關文章
相關標籤/搜索