《深入理解計算機系統》第二章學習筆記
阿新 • • 發佈:2018-11-04
資訊的表示和處理
本章主要描述計算機內的數字儲存及運算方式。
獨立的、單個的位通常是不怎麼有用的,但計算機通過把位組合在一起,再加上某種解釋,即賦予不同的可能的位模式以含義,就可以表示任何有限集合的元素。比如對文件中的子母和符號進行編碼。
資訊儲存
位元組是記憶體的最小可定址單位,記憶體被視為一個非常大的位元組陣列,稱為虛擬記憶體
,記憶體的每一個位元組由唯一的一個數字標識,稱為地址,所有可能的地址的集合稱為虛擬地址空間
。
十六進位制標識法
一個位元組由八位組成,這裡的位都是指二進位制位
,人們發現用‘0’,‘1’串標識資料太過冗長,通常用十六進位制標識計算機中的位模式。十六進位制和二進位制之間的轉換非常簡單,每四位二進位制位對應一個十六進位制數,不足四位的高位補零。約定以0x
定址和位元組順序
小端法
。 最低有效位元組在最前面。大端法
。 最高有效位元組在最前面。
大多數Intel相容機器只用小端模式,IBM和Oracle的大多數機器採用大多數模式。許多新的微處理器採用雙端法
,移動端的Android和IOS只能運行於小端模式。
C語言中的移位操作
左移
。低位補零。算數右移
。高位補之前的最高位的值。邏輯右移
。高位補零。
整數表示
無符號數編碼
對於w位的二進位制向量(Xw-1,Xw-2,······,X0),其每一位的權重為2^w-1,因此這個向量的十進位制值為Xw-12^w-1+Xw-2
補碼編碼
相較於無符號編碼,除最高位權重為負,別的一樣。
無符號數編碼和補碼編碼都是具有唯一性
有符號數和無符號數轉換
只需要記住一個原則,轉換中位模式不變。
擴充套件一個數字的位表示
無符號數零擴充套件
。在高位之前新增零。補碼數的符號擴充套件
。在高位新增符號位的值。
小型別像大型別轉變,先改變大小(擴充套件),再轉換型別。
問題
一
/* 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; }