在上一篇文章中,咱們主要講述了定點數的加、減、乘運算,惟獨沒有講解除法運算。緣由有兩個,一來上一篇文章的內容確實比較多,二來除法運算比乘法相對複雜。
因此,本文將從除法的來歷講起,而後講除法運算的幾種方法。微信
咱們來看這樣一個例子:在8位寄存器中存儲了00000111,4位寄存器中存儲了0010,計算00000111/0010。
回想一下,咱們整數的除法是怎麼作的?如上面的數改寫成十進制,即7/2的結果是多少呢?
咱們確定是先列出一個除法式子,像下面這樣。設計
咱們首先是判斷一下,當前被除數7中有幾個除數,有幾個則商就上幾個,而後被除數減去除數乘商獲得餘數,接着判斷餘數中有幾個除數,直到除不開爲止。若是發現商是0,則被除數補0,除數向右移動一位,繼續計算。
在7中有3個2,結果是餘1,1中不存在2,這就是最終的結果。
接着看一下上面的例子:咱們要作的,確定是先列出一個式子。3d
和整數除法同樣,兩個二進制數之間的除法一樣的。步驟以下:cdn
大致上的過程就是這樣的。根據上述的過程,咱們可以很容易的設計出基本的除法器。此外,要注意的是,除法器應該具備判斷除數或者被除數是否爲0的功能,由於被除數爲0時結果爲0,沒有意義;而除數爲0時,結果爲無窮大,沒法表示。blog
在瞭解了除法器的基本狀況後,咱們就來說除法運算的兩種方法。分別是:恢復餘數法、加減交替法。it
從名字中能夠看出,這種方法對餘數作了某種恢復。爲何會出現這種恢復呢?緣由很簡單,咱們在分析通常除法的過程當中能夠看到,若是除數和被除數當前對齊的位上,被除數有0個除數,此時咱們就須要將被除數補0。可是計算機並不知道被除數是否夠除除數(由於無論除數和被除數的狀況如何,最後的商上的位,不是0就是1),就須要先用被除數減去除數,若是發現餘數是小於0的,那麼計算機就知道了此時對齊的位沒法獲得最終的結果,則將被除數向又移動一位。這就是恢復餘數法的核心思想。固然,咱們在直接計算的時候,須要將兩個數的絕對值相除,再獲得最終的結果。
接下來咱們就來看,恢復餘數法到底是如何運算的。io
加減交替法也稱做不恢復餘數法。爲啥呢,由於在加減交替法中,先讓被除數減除數,若是結果爲正,則上1,;若是結果爲負,則加上除數。接着將被除數向作移動一位。不過你要是細看的話,這兩種方法其實並無太大的區別,本身好好體會一下就好了。
下面看個例子:class
本節是承接定點數的計算方法的,下一節,咱們將開始計算機的運算方法後半部分的內容,即浮點數的計算過程,內容並很少,因此會放到一篇文章中。
若是你喜歡個人文章,歡迎關注個人微信公衆號:最高權限比特流。原理