最近在網上做題,要求不用四則運算(+、-、*、/)實現兩個數相加。我們首先想到的就是用位運算來實現,覺得挺有意思,也是對計算機底層運算原理的一個理解,故對其做了一個記錄和原理分析。
函數實現如下圖所示:
int add(int num1, int num2)
{
int tmp1 = num1^num2;
int tmp2 = (num1&num2)<<1;
while(tmp2)
{
num1 = tmp1^tmp2;
num2 = (tmp1&tmp2)<<1;
tmp1= num1;
tmp2= num2;
}
return tmp1;
}
原理分析:
以63加1爲例,如下程序打印了位運算的過程(tmp1 和 tmp2 的二進制值):
其實原理很簡單:
tmp1用來存放兩個數相加(不進位)的結果,tmp2用來存放兩個數相加的進位。那麼number1加number2即可等效爲tmp1加tmp2,由於tmp2是通過或運算再移位得來的,最終一定爲爲零,那麼tmp1就是我們求的兩數相加結果。