目錄
4.3.1原碼除法及實現
1.原碼除法演算法
原碼恢復餘數演算法
原碼不恢復餘數演算法(加減交替演算法)
涉及減法操作 移位操作(邏輯移位)
大致過程:
第一次上商判溢位。
用部分餘數減去被除數絕對值(通過加上被除數絕對值的相反數的補碼來實現)
如果結果大於0,則上商1,部分餘數左移一位。
如果結果小於0,則上商0,先加上被除數絕對值,恢復餘數,再將部分餘數左移一位。
迴圈進行以上操作。
畫圖理解 (萬歲)
大概意思是這麼個意思,但沒有講移位操作(其實就相當於十進位制除法裡面的給部分餘數補0,就是擴大十倍後再繼續進行除法運算,那這裡恢復部分餘數後,也要進行移位,就是擴大兩倍嘛)
來個題目理解一下做題過程叭
第一步:寫出參與運算的x和y的機器數,x和y的絕對值。y絕對值的相反數的補碼
(用來實現減法操作的,啥?減法操作!對,就是部分餘數與除數的減法啦!)
第二步:計算商的符號
(怎麼計算嘞?正正得正,負負得負!其實就是x與y的符號位的異或啦!)
第三步:計算數值部分
(終於來計算數值部分啦!看吧!就是按照前面講的過程來運算的)
肯定懂了叭!!!!找題目做一下!(逃
這個演算法是對恢復餘數法的改進!
首先,我們還是來看一下原碼恢復餘數的演算法!
這種加法運算的次數是不固定的,很麻煩!
所以很明顯啦!不恢復餘數就是不管上商為1還是為0,進行加法的次數都是一定的,且都為1.
那具體怎麼實現?
一 上商為0
ri先加上y(恢復餘數),再左移移位,再減去y
在二進位制中,左移一位就是擴大兩倍
所以上述過程可以寫成
2(ri+y)-y=2ri+y
所以其實就是將餘數左移一位後,再加上y即可
二 上商為1
ri左移移位,再減去y
總結就是這張
因此,大致過程:
第一次上商判溢位。
用部分餘數減去被除數絕對值(通過加上被除數絕對值的相反數的補碼來實現)
(前面跟恢復餘數做法一樣)
如果結果大於0,則上商1,ri左移移位,再減去y,得到下乙個餘數。
如果結果小於0,則上商0,ri左移移位,再加上y,得到下乙個餘數。
迴圈進行以上操作。
其實理解了不恢復餘數演算法後,這個就很簡單了!
原碼的恢復餘數除法和加減交替除法
原碼的除法分講兩種,一種是恢復餘數法,一種是加減交替法 恢復餘數法 過程為 對被除數和除數取絕對值,先做被除數 除數。判斷餘數是否小於0,若是,則加上除數的補,否則減去除數的補 移位,重複步驟 直到移位次數等於除數的位數,上商的次數為移位次數 1。直接上題 x 0.1011,y 0.1101,求 x...
實現除法操作
一道演算法題,涉及到了二進位制的位操作,借這個機會整理一下相關的知識點,並且在這道演算法題中進行了實踐 本文的解法來自於該演算法題的一篇討論。對除數和被除數實現除法運算,其中不使用乘法 除法和求餘操作,返回對應的商。如,input dividend 10,divisor 3 output 3 cla...
C C 除法實現方式及負數取模詳解
一 下面的題目你能全做對嗎?1.7 4 2.7 4 3.7 4 4.7 4 5.7 4 6.7 4 7.7 unsigned 4 答案 1 13 3 1 31073741822 如過你全部答對,你可以無視後面的內容 二 除法的取整分類 除法的取整分為三類 向上取整 向下取整 向零取整。1.向上取整 ...