我们在对两个数进行相加处理的时候大都是会使用加法直接进行相加操作,没有什么疑问。
但是如何在不使用加号的同时把两个数完成相加操作?
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的值
x这个时候的值为9,就得到了6和3相加的结果。
原文:https://www.cnblogs.com/programchen/p/12324830.html