1. 程式人生 > >如何不用加法,實現兩個數相加

如何不用加法,實現兩個數相加

首先我們先看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;
}