利用位運算實現兩個整數的加法運算,請程式碼實現,並作簡要說明。
阿新 • • 發佈:2019-01-31
#include <stdio.h>
int main(void) {
int add(int a,int b);
int m,a,b;
scanf("%d,%d",&a,&b);
m = add(a,b);
printf("m=%d",m);
return 0;
}
int add(int a,int b){
if(b == 0) return a;//沒有進位時,完成運算,a為最終和。
int sum,carry;
sum = a ^ b;//沒有進位的加法運算
carry = (a & b) << 1;//進位,左移運算。
return add(sum , carry);//遞迴,相加。
}
首先 a&b是兩個數字中相同位與的結果,所以對待兩個數字都為0的話,則與的結果是0,
如果兩個數字是1的話與的結果是1,因此可以看出與的結果是兩個數字相同位做加法運算的一半,
a^b則是兩個數字相異位的加法運算之後
因此 ((a&b)<<1)+(a^b) 則為兩者之和
*/
連結:https://www.nowcoder.com/questionTerminal/f0925bdc2bb9430f8c6323f635e3f1b4
來源:牛客網
觀察加法運算,把兩個整數轉化為2進位制以後,1只有跟1相加的時候才為0,1和0相加是1,0和0相加也為0,所以聯想到異或操作可以得到這個值,然後進位的話只有1和1相加有進位,就可以用位與實現。每次的進位左移一位,知道進位消失