如何只用邏輯運算和移位實現二進位制的加法?

2021-10-10 04:47:47 字數 852 閱讀 9367

邏輯運算有與、或、非、異或四種。而要實現二進位制加法最關鍵的步驟就是如何實現進製和相加(不進製加法).

1.用"與"來提取進製

由and(與,下文皆稱為and)的運算性質可以得到只有當兩個數都為1時才能運算得1,而這樣恰好提取了進製,只要向左移位即可成功實現進製.

2.用"異或"來做不進製的加法

由xor(異或,下文皆稱為xor)的運算性質,二者不同時為1,二者相同時為0,除了1與1相加外,本身就相當與加法的法則,而這裡的進製工作由and替代了,所以1+1確實也是0,所以就可以用作加法.

3.設計演算法來進行運算

我們將相加的數與移位後的進製相加後就可得到結果了.但是由於這裡不能使用相加,只能反覆嘗試上述運算直到不進製,最後異或即可得到結果.而於判斷結束標誌就是不進製也就是and的結果為0.

4.設計演算法

①.and 提取進製 並左移一位

②.xor 不進製相加

③.反覆重複上述步驟.

④.當and結果為0時停止.

5.c語言**實現(初學者,勿噴= =)

include 

intmain()

while

(a !=0)

;printf

("二者之和是%d"

, b)

;return0;

}

這裡只是為了表述清楚,中間的迴圈**其實可以優化一下

do

while

(a =

(a <<=1)

);

5.結語

實現加法的關鍵就是回歸加法的本質,再去用邏輯運算實現,最後設計乙個好的演算法來實現只用邏輯運算和移位實現二進位制的加法.

8086邏輯運算和移位

一 邏輯運算指令and or not xor test 與,或,非,異或,測試 與,或,非,異或 這邊大家都知道,這裡不在重複,舉幾個例子 and ax,1000h ax中的16位數和1000h相與,結果送到ax中。or ax,00f0h ax中的值與00f0相或,結果在ax中 not al al中...

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

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

邏輯運算指令和移位指令

and xortest shlsal rolrcl ornot shrsar rorrcr and,or xor 和 test都是雙位元組操作指令,運算元的定址方式的規定與算術運算指令相同.not是單位元組操作指令,不允許使用立即數.邏輯運算均是按位進行操作,真值表如下 and 位與 or 位或 x...