接上一次的部分,後兩節講的是整數運算以及浮點數的運算。整數分為無符號數字和補碼。浮點數分為二進位制小數和ieee浮點表示。
三種數字表示:
無符號:傳統的二進位制表示法
補碼:表示有符號整數的最常見方法
浮點數:表示實數的科學計數法的以為為基底的版本
結果太大,超出位數的限制時——溢位
邏輯右移和算數右移: 邏輯右移在左端補0,算數右移在左端補最高有效位的值。無符號數右移必須是邏輯右移,有符號數沒有要求,但是基本實現算術右移。
實現中當左移或者右移超過資料位數時,對移位數量取餘,但標準沒有規定。
無符號加法等價於計算和mod 2^w。 s = x + y,當且僅當s < x或s < y時發生溢位。
補碼加法,負溢位得到正數,正溢位得到負數。
補碼的非,x>-2^(w-1) 時為-x,x=-2^(w-1)時為它本身。求補碼的非可以採用兩種方法:
取反加一
將最右邊1的左邊所有位取反
無符號乘法:xy = (xy)mod(2^w)。
整數乘法代價很高,編譯器會嘗試將乘法優化為加法和位移來提高效能。例如x14=(x<<3)+(x<<2)+(x<<1),或者x14=(x<<4)-(x<<1)
浮點數的捨入以及浮點運算。
深入理解計算機系統 第二章
1 什麼是規格化的值?當exp的位模式既不全為0,也不全為1,這種情況下,階碼字段被解釋為以偏置形式表示的有符號整數,也就是說,階碼的值是e e bias,其中e是無符號數,其位表示為,而bias就是乙個等於2k 1 1的 偏置值。2 什麼是非規格化的值?當階碼域全為0時,所表示的就是非規格化的形式...
《深入理解計算機系統》第二章部分習題
人生第一篇博文。深入理解計算機系統 第二章部分習題 2.62 int shifts are arithmetic 對int型別數使用算術右移返回1,否則返回0 顯然,只需考慮負數即可 非負數算術右移與邏輯右移相同 這裡以 1為例,1算術右移一位,所產生的二進位製碼代表的數值不變 而邏輯右移則會使最高...
深入理解計算機系統第二章家庭作業
2.91遵循位級浮點編碼規則,實現具有如下原型的函式 compute f if f is nan then return f.float bits float absval float bits f 對於浮點數f,這個函式計算 f 如果f是nan,你的函式應該簡單地返回f。測試你的函式,對引數f可以...