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

2021-07-28 17:47:03 字數 784 閱讀 5277

1 用邏輯運算實現加法:

兩個正整數相加,如果使用移位操作符和邏輯運算:

與&運算,適用於對應位相同的加法,如x=3=(0011),y=3=(0011),則x&y=0011=(x+y)/2;

異或運算,適用於對應位不同的加法,如x=3=(0011),y=3=(0100),則x^y=0111=7

故(x+y)/2=x&y+(x^y)>>1

對於二進位制加法:1+1=0,1+0=1,0+1=1,0+0=0,類似每一位的異或運算結果,只不過還要考慮進製,且有進製的情況只發生在a&b=1情況下。

int add(int num1,int num2)

{if(num2==0)return num1;

int t=num1^num2;

int ca=(num&num2)<<1;//高位進製

return add(t,ca);

2 用邏輯運算實現乘法:

先看乙個例項:1011*1010,分為兩個運算,1011*0010,相當於左移一位得到10110,1011*1000相當於左移三位則為1011000,故兩者乘積為10110與1011000之和1101110.因而乘法可以通過一系列移位和加法完成,注意一些小技巧:

-n=~(n-1)

求n得最後乙個1可以通過n&-n=n&~(n-1)

去掉n的最後乙個1可以通過n&(n-1)

int multiply(int a,int b)

return res;

}

8086邏輯運算和移位

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

邏輯運算與移位運算

原始碼 正數的補碼與原碼相同例 7 原始碼 00000111 補碼 00000111 用8位二進位制表示乙個數 負數的補碼 符號位為1,其餘位為該數絕對值的原碼按位取反 然後整個數加1。7 原始碼 10000111 其絕對值為00000111 取反加一 11111001 為 7補碼 已知乙個數的補碼...

邏輯運算指令和移位指令

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