原碼的恢復餘數除法和加減交替除法

2021-10-04 03:30:37 字數 2007 閱讀 9192

原碼的除法分講兩種,一種是恢復餘數法,一種是加減交替法

恢復餘數法

過程為:

① 對被除數和除數取絕對值,先做被除數-除數。

② 判斷餘數是否小於0,若是,則加上除數的補,否則減去除數的補

③ 移位,重複步驟② 直到移位次數等於除數的位數,上商的次數為移位次數+1。

直接上題:

x=-0.1011, y=-0.1101, 求[x/y]原。

解:① 先求絕對值,x_=0.1011, y_=0.1101,y_求補=1.0011。

② 被除數-除數,0.1011+1.0011=1.1110。

③ 餘數小於0,上商0,餘數加上除數來恢復餘數,1.1110+0.1101=0.1011,往左移位,第一次移位得到餘數=1.0110,商=0

④ 餘數-除數,1.0110+1.0011=0.1001,餘數大於零,此時上1,不用恢復餘數移位,第二次移位得到餘數=1.0010,商=01

⑤ 重複步驟④,1.0010+1.0011=0.0101,餘數大於零,上1,不恢復餘數移位,第三次移位得到餘數0.1010,商011

⑥ 重複步驟④,0.1010+1.0011=1.1101,餘數小於零,上0,恢復餘數移位,1.1101+0.1101=0.1010,第四次移位得到餘數=1.0100,商0110

⑦ 重複步驟④,1.0100+1.0011=0.0111,餘數大於零,上1,不移位,得到最終商0.1101。

⑧ 取結果,捨去最高位商0,得到1101,結果符號判斷,被除數和除數符號相同,取0,因此結果為0.1101。

原理總結:我們可以把每一步中的減去除數當作過程1,把判斷餘數是否需要恢復和上商作為另外乙個過程2。開始除法時,原碼的計算是要求絕對值的,符號位另外處理,直接進行過程1,先減去除數;隨後進行過程2,判斷餘數是否小於零,如果是,則先上商0,恢復餘數後再移位,如果餘數不小於零,則上商1,不恢復餘數經行移位。移位完畢後,重複過程1和過程2,直到移位次數字除數的尾數字數,最後一步還要上一次商。

注意事項:

原碼的所有計算符號位都取一位,計算開始之前取絕對值,符號位單獨處理。

移位過程中採用補碼的邏輯移位,即最高位也進行移位,末尾補0。

上商的次數一定是移位次數+1,且取結果時要丟掉最高位0;這裡要講的是,任何能進行的除法第一位一定是0,否則當作溢位處理,不進行除法。

········加減交替法

過程與恢復餘數法相似,加減交替法是對恢復餘數法的改良,優化了餘數每次跟除數做完差後判斷是否恢復的過程。開始時與原碼運演算法相同處理,取絕對值,然後第一次被除數對除數做一次差,判斷最高位是否溢位,如果第一位商為0,則繼續下去。移位後的處理由上一次的商決定,如果上一次商0,則對餘數進行左移後-除數;若上一次商為1,則對餘數左移後+除數。移位次數等於除數的尾數字數,上商次數為移位次數+1。

拿上述的題作為例子:

x=-0.1011, y=-0.1101, 求[x/y]原。

解:① 被除數和除數求絕對值,的x_=0.1011, y_=0.1101,y_求補=1.0011,第一步進行被除數-除數,即0.1011+1.0011=1.1110,小於0,上商0,繼續除法。

② 第一次上商0,餘數左移後+除數,即1.1100+0.1101=0.1001,餘數大於0,上商1,得到商01。

③ 上一次上商1,餘數左移後-除數,即1.0010+1.0011=0.0101,餘數大於0,上商1,得到商011。

④ 上一次上商1,餘數左移後-除數,即0.1010+1.0011=1.1101,餘數小於0,上商0,得到商0110。

⑤ 上一次上商0,餘數左移後+除數,即1.1010+0.1101=0.0111,餘數大於0,上商1,得到商01101。

⑥ 取結果,合掉商的最高位,符號位為被除數和除數符號位異或,得0.1101。

兩種除法的總結:

所有的原碼計算均先取絕對值,乘法和除法都是取1位符號位。

符號位單獨處理。

原碼的移位規則都是邏輯移位,不是算術移位。

餘數每次做加減的物件是除數,不要搞錯了。

原碼的兩種除法過程稍微有一點不同,需要加強記憶,配合邏輯電路圖會更好。

恢復餘數除法器

恢復餘數除法器是一種常用的除法器,過程與手算除法的方法很類似,過程為 將除數向左位移直到比被除數大 執行被除數減除數操作,得餘數,並將商向左移位1位,空位補1 若餘數大於0,除數向右移位1位。如餘數小於0,餘數加當前除數,商最後一位置0,除數向右移位1位 重複到2,只到除數比最初的除數小 rtl 就...

不恢復餘數除法器

不恢復餘數除法器的基本演算法來自於恢復餘數除法器,區別在於當餘數變負時不停下恢復餘數而是繼續執行迭代,並在迭代中加上移位後除數而不是減去移位後除數,基本演算法如下所示 將除數向左移位到恰好大於被除數 若餘數為正 餘數減去移位後除數 若餘數為負 餘數加上移位後除數 若現餘數為正,該位結果為1,否則為0...

不恢復餘數除法器

不恢復餘數除法器的基本演算法來自於恢復餘數除法器,區別在於當餘數變負時不停下恢復餘數而是繼續執行迭代,並在迭代中加上移位後除數而不是減去移位後除數,基本演算法如下所示 將除數向左移位到恰好大於被除數 若餘數為正 餘數減去移位後除數 若餘數為負 餘數加上移位後除數 若現餘數為正,該位結果為1,否則為0...