《深入理解計算機系統》第二章部分習題

2021-07-31 10:22:01 字數 900 閱讀 6777

人生第一篇博文。

《深入理解計算機系統》第二章部分習題:

2.62 int_shifts_are_arithmetic() 對int型別數使用算術右移返回1,否則返回0;

顯然,只需考慮負數即可(非負數算術右移與邏輯右移相同)。這裡以-1為例,-1算術右移一位,所產生的二進位製碼代表的數值不變;而邏輯右移則會使最高位為0,變成(1<<31)-1,最大值。

int int_shifts_are_arithmetic()

2.63 函式srl用算術右移實現邏輯右移,後面的**不允許使用右移或者除法。

算術右移,若x為正數,則算術右移的結果等於邏輯右移的結果;若x為負數,則算術右移相較於邏輯右移會補上k個1。顯然,x=a*2^(w-k)+b;x』=x>>k=(c)*2^(w-k)+a:若x>0,c=0;若x<0,c=(1<

unsigned srl(unsigned x,int k)

2.65 2.66都採用了二分的思想,具體的可以參考其他部落格

2.75

若x和y是無符號數,其對應的二進位制表達的補碼為x』,y』;

x*y=(x』+x』(31)2^32)(y』+y』(31)*2^32)

=x』y』+x』*y』(31)*2^32+y』*x』(31)*2^32+x』(31)*y』(31)*2^64

所以兩邊除以2^32就可以得到所求部分

而x』*y』/2^32=signed_high_prod((int)x,(int)y);

unsigned unsigned_high_prod(unsigned x,unsigned y)

這個題目做起來郵費是郵費鬧==

有興趣再做其餘的題目

深入理解計算機系統 第二章

1 什麼是規格化的值?當exp的位模式既不全為0,也不全為1,這種情況下,階碼字段被解釋為以偏置形式表示的有符號整數,也就是說,階碼的值是e e bias,其中e是無符號數,其位表示為,而bias就是乙個等於2k 1 1的 偏置值。2 什麼是非規格化的值?當階碼域全為0時,所表示的就是非規格化的形式...

深入理解計算機系統第二章家庭作業

2.91遵循位級浮點編碼規則,實現具有如下原型的函式 compute f if f is nan then return f.float bits float absval float bits f 對於浮點數f,這個函式計算 f 如果f是nan,你的函式應該簡單地返回f。測試你的函式,對引數f可以...

深入理解計算機系統

關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...