除法運算就是移位和相減

2021-07-04 09:02:07 字數 1079 閱讀 1363

2進製完成除法運算就是移位和相減,比如1011011除以1110順序如下: 

1   -   1110   不夠減,   結果添0,   1左移一位再加上原來1後的0,為10 。

10   -   1110   不夠減,   結果添0,   10左移一位再加上原來10後的1,為101 。

101   -   1110   不夠減,   結果添0,   101左移一位再加上原來101後的1,為1011 。

1011   -   1110   不夠減,   結果添0,   1011左移一位再加上原來1011後的0,為10110 。

10110   -   1110   =   1000     結果添1,同上左移加原來10110後的1得   10001 。

10001   -   1110   =   11         結果添1,同上左移加原來101101後的1得   111 。

111   -   1101   不夠減,結果添0,此時1011011所有位都已移完,運算完畢 。

即   1011011   =   1110   *   0000110   +   111 。

也即   91   =   14   *   6   +   7  。

由於你相除的兩個數放在兩個陣列中,比如a與b,要模擬這種運算的話就需要能不 

斷地從a中取出其二進位制的高位,新增到乙個當前值的陣列c中,而實際進 

行運算的就是c與b。陣列單元的型別必然是多位的,你必須要實現做到對陣列c左移

一位的操作,剩下的就是判斷c夠不夠減b(即c陣列的數是不是比b大)了。 

至於左移,我想大家都想到了,其實c和b是倒序存放的,以陣列單元為8位為例, 

c[0]存放著c的最低8位,用表示式表示就是   c[0]   =   c   &   0xff,   c[1]   =   c   &   0xff00,   ... 

這樣當移位時,只要保留當前單元c[i]的最高位,即h   =   c[i]   > >   7,然後直接對 

c[i]左移一位即   c[i] < <1,然後再加上上一單元c[i-1]保留的最高位即得到當前的c[i] 

對於c[0]來說,它的上一單元的最高位自然就是a的最高位了。

移位,邏輯運算實現加法,乘法和除法

1 用邏輯運算實現加法 兩個正整數相加,如果使用移位操作符和邏輯運算 與 運算,適用於對應位相同的加法,如x 3 0011 y 3 0011 則x y 0011 x y 2 異或運算,適用於對應位不同的加法,如x 3 0011 y 3 則x y 0 故 對於二進位制加法 類似每一位的異或運算結果,只...

C C 中移位實現乘除法運算

用移位實現乘除法運算 a a 4 b b 4 可以改為 a a 2 b b 2 說明 除2 右移1位 乘2 左移1位 除4 右移2位 乘4 左移2位 除8 右移3位 乘8 左移3位 通常如果需要乘以或除以2的n次方,都可以用移位的方法代替。大部分的c編譯器,用移位的方法得到 比呼叫乘除法子程式生成的...

利用移位和減法的除法演算法

楊季文 80x86組合語言程式 p352,子程式 divx 使用移位和減法進行除法運算,嘗試舉例驗證之。程式如下 子程式名 divx 功 能 64 位數除以32 位數,商用64 位表示 入口引數 edx eax 被除數 ebx 除數 出口引數 edx eax 商 ebx 餘數 divx proc n...