4 3 1原碼除法及實現

2021-10-10 10:24:33 字數 1708 閱讀 3063

目錄

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.向上取整 ...