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...