使用位運算實現加減乘除

2021-08-27 23:55:13 字數 1798 閱讀 8381

在不使用+,-,*,/,四則運算符號的情況下,通過基本位運算實現加減乘除四則運算。

1. c++中使用位運算實現加法

首先,我們通過對x和y進行&位運算,得出每一位上的進製。然後對x和y進行^位運算,得出沒有加進制的和。最後將所得的和當做新的x,所得的進製往左移一位(第零位的進製輸入為0)當做新的y,繼續做上面的步驟,直到進製為0,此時x中儲存的就是我們要求的x和y的和了。

實現**如下:

int add(int a, int b)

return sum;

}

2. c++中使用位運算實現減法

要想得到乙個數的相反數,只要對這個數求2-補碼就可以了,即取反加1操作。然後繼續對得到的結果進行該操作就可以得到原來的數字。通過使用2-補碼形式的編碼,我們可以把減法運算順利的轉換成加法。只要對減數求2-補碼,然後跟被減數相加即可得到差值。

通過上面的研究,要在**中實現減法已經很明了,很簡單了。第一步對減數取反然後加1,第二步將第一步所得值和被減數相加。具體**如下:

int subtract(int a, int b)

3. c++中使用位運算實現乘法

乘法最簡單的理解就是,將被乘數加乘數次即可得到乘積。考慮到負整數的乘法,我們這裡先對乘數和被乘數求絕對值,然後對絕對值進行上述的乘法操作。確定乘積符號的規則為同號為正,異號為負。這中實現方式比較簡單,**如下:

int multiply(int a, int b)

//計算乘積的符號

if((a ^ b) < 0)

return product;

}

上面的第一種實現方式雖然簡單,但是效率太低。如果乘數和被乘數小一點還可以,如果大了那效率是不能忍受的。這裡要實現的這種乘法,最多做log(n)次的加法操作,就可以求出乘積。這種方式和第一方式的相同點是,這裡也是先對兩數的絕對值就乘積,最後確定符號。這種實現方式就是對手動計算乘數的模擬。具體步驟如下:

1)根據乘數每一位為1還是為0,決定相加數取被乘數移位後的值還是取0;

2)各相加數從乘數的最低位開始求值,並逐次將相加數(被乘數)左移一位,最後一步求和

3)符號位根據同號為正異號為負的原則

int multiply(int a, int b)

multiplicand = multiplicand << 1;

multiplier = multiplier >> 1;

}  //計算乘積的符號

if((a ^ b) < 0)

return product;

}

4. c++中使用位運算實現除法

最簡單的除法實現就是不停的用除數去減被除數,直到被除數小於除數時,此時所減的次數就是我們需要的商,而此時的被除數就是餘數。唯一需要注意的就是商的符號和餘數的符號。商的符號確定方式也乘法是一樣,即同號為正,異號為負。而餘數的符號和被除數的符號是一樣的。和簡單的乘法實現一樣,這裡我們要先對兩數的絕對值求商,求餘數。最後再確定符號。具體實現**如下:

//求商

int divide(int a, int b)

//求商的符號

if((a ^ b) < 0)

return quotient;

}//求餘

int remainder(int a, int b)

//求餘的符號

if(a < 0)

return remainder;

}

使用位運算實現加減乘除

經常看到類似 不使用 符號的前提下,實現加 減 乘 除 第一次遇見的同學可能會懵,如果你記起來乙個叫位運算的東西就會豁然開朗了。加法 比如5 6。小學的時候數學老師告訴我們的是,先求不算進製的值,也就是1,然後再將進製結果 這裡是1 加入,直到進製為0。使用位運算也是同樣的道理。只不過我們對於進製和...

位運算實現加減乘除

include include 加法運算 int add int a,int b 補碼中正數轉負數的原理 int negative int a 減法運算 int sub int a,int b 判斷正負 bool isnegative int a 僅計算正數乘法 int multi help int...

位運算實現加減乘除

關於邏輯右移和算術右移 vs中,對於unsigned型別,是邏輯右移,對於signed,算術右移 加法器的實現 對於不考慮進製的加法 0 0 0 1 0 1 0 1 1 1 1 0 即是異或運算 考慮進製 0 0 1 0 0 0 1 0 1 1 1 即是與運算 以下程式,a即不考慮進製部分,b為進製...