【重學計算機】計組D3章:運算方法與運算器
1. 定點數運算及溢出
定點數加減法:減法化加法,用補碼直接相加,忽略進位
溢出:運算結果超出了某種數據類型的表示範圍
溢出檢測方法:統一思想概括為正正得負或負負得正則溢出,正負或負正不可能溢出
方法1:V = XYS + XYS(XY為兩個加數的符號位,S為結果的符號位,_表示非),那麽V = 1則為溢出
方法2:V = C0 ⊕ C1(C0是最高數據位產生的進位,C1是符號位產生的進位),那麽V = 1則為溢出
方法3:V = Xf1 ⊕ Xf2(數據采用變型補碼 Xf1Xf2 X0X1X2X3... )
PS:以上方法都是利用正正得負負負得正則溢出為出發點的電路設計
2. 補碼一位乘法——Booth算法
[x·y]補 = [x]補·( -y0+∑ yi2-i )
= [x]補·[ - y0 + y12-1 + y22-2 + … + yn2-n]
= [x]補·[ - y0 + (y1 - y12-1) + (y22-1 - y22-2) + … + (yn2-(n-1) - yn2-n)]
= [x]補·[(y1 - y0) + (y2 - y1) 2-1 + … + (yn - yn
總結起來設計數字電路的規則就是:
- 為00或者為11的時候,直接右移一位
- 為01的時候,加x的補,然後右移一位
- 為10的時候,加-x的補,然後右移一位
PS:其實第一行和最後一行都能設計數字電路,為什麽要從第一個式子推到最後一個式子呢?原因有兩點:
1)二進制中如果有0,可以不進行運算
2)如果有連續的1可以減少計算次數,比如 a * 001111100 = a * (010000000 - 0000000100)
所以每次判斷 yn+1 - yn就可以減少計算次數了
參考:https://www.cnblogs.com/xisheng/p/9260861.html
3. 定點數除法
4. 浮點數加減法
(1)求階差,階碼小的對齊大的
(2)尾數加減
(3)結果規格化
【重學計算機】計組D3章:運算方法與運算器