1. 程式人生 > >《深入理解計算機系統》第二章學習筆記

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

資訊的表示和處理

本章主要描述計算機內的數字儲存及運算方式。

獨立的、單個的位通常是不怎麼有用的,但計算機通過把位組合在一起,再加上某種解釋,即賦予不同的可能的位模式以含義,就可以表示任何有限集合的元素。比如對文件中的子母和符號進行編碼。

資訊儲存

位元組是記憶體的最小可定址單位,記憶體被視為一個非常大的位元組陣列,稱為虛擬記憶體,記憶體的每一個位元組由唯一的一個數字標識,稱為地址,所有可能的地址的集合稱為虛擬地址空間

十六進位制標識法

一個位元組由八位組成,這裡的位都是指二進位制位,人們發現用‘0’,‘1’串標識資料太過冗長,通常用十六進位制標識計算機中的位模式。十六進位制和二進位制之間的轉換非常簡單,每四位二進位制位對應一個十六進位制數,不足四位的高位補零。約定以0x

開頭的數字為十六進位制的值。

定址和位元組順序

  • 小端法。 最低有效位元組在最前面。
  • 大端法。 最高有效位元組在最前面。

大多數Intel相容機器只用小端模式,IBM和Oracle的大多數機器採用大多數模式。許多新的微處理器採用雙端法,移動端的Android和IOS只能運行於小端模式。

C語言中的移位操作

  • 左移。低位補零。
  • 算數右移。高位補之前的最高位的值。
  • 邏輯右移。高位補零。

整數表示

無符號數編碼

對於w位的二進位制向量(Xw-1,Xw-2,······,X0),其每一位的權重為2^w-1,因此這個向量的十進位制值為Xw-12^w-1+Xw-2

2^w-2+···+X0*1。

補碼編碼

相較於無符號編碼,除最高位權重為負,別的一樣。

無符號數編碼和補碼編碼都是具有唯一性

有符號數和無符號數轉換

只需要記住一個原則,轉換中位模式不變

擴充套件一個數字的位表示

  • 無符號數零擴充套件。在高位之前新增零。
  • 補碼數的符號擴充套件。在高位新增符號位的值。

小型別像大型別轉變,先改變大小(擴充套件),再轉換型別。

問題

/* WARNING: This is buggy code */
float sun_elements(float aH, unSigned length){
    int i;
    float result = O;
    for (i = O; i <= length - 1; i++)
        result += a[i];
    return result;
}