如何不用加法,實現兩個數相加
阿新 • • 發佈:2019-01-22
首先我們先看5和7相加。
a 5 二進位制 101
b 17 二進位制 10001
a+b 22二進位制 10100
第一步:讓a^b得到 10100 與a+b答案相比沒有算進位
第二步:讓a&b得到 00001 (a&b)<<1 ) 得到00010記錄進位 原因:因為只有1+1會產生進位,1+0,0+0,0+1均不會產生進位這時我們發現這剛好符合(a&b)<<1的性質
第三步:讓((a&b)<<1 )^(a^b)就相當於進位 ,然而這樣又會產生進位,因此就重複迴圈。直到進位為0結束。
給出程式碼如下:
#include<stdio.h> #include<stdlib.h> int Add(int a, int b) { int sum = 0; int count = 0; do{ sum = a^b; count = (a&b) << 1;//進位 a = sum; b = count; } while (b != 0); return sum; } int main() { int ret=Add(3, 9); printf("%d", ret); system("pause"); return 0; }