不使用加号的加法

我们在对两个数进行相加处理的时候大都是会使用加法直接进行相加操作,没有什么疑问。

但是如何在不使用加号的同时把两个数完成相加操作?

 1 #include <iostream>
 2 
 3 using namespace std;
 4 int add1(int a, int b)
 5 {
 6     int x, y;
 7     while (b != 0)
 8     {
 9         x = a ^ b;
10         y = (a&b) << 1;
11         a = x;
12         b = y;
13         
14     }
15     return a;
16 }
17 int main()
18 {
19     cout << add1(6, 3) << endl;
20     return 0;
21 }

这一种方法是使用位运算完成对两个数的相加。

在这其中x代表的是两数之和,y代表的是进位标志。

这里假设使用的是6和3的相加,通过异或运算和与运算加上左移操作得到两数的和。

6  :0110

3 : 0011

第一步之后的 x :0101         y:0100

第二步之后的 x :0001         y :1000

第三部之后的 x :1001         y :0000

这个时候的b为0,跳出判断,返回x的值

扫描二维码关注公众号,回复: 9231285 查看本文章

x这个时候的值为9,就得到了6和3相加的结果。

猜你喜欢

转载自www.cnblogs.com/programchen/p/12324830.html