不用+、-、×、÷数字运算符做加法
原文地址:http://zhedahht.blog.163.com/blog/static/254111742011125100605/
看到这个的题目第一个反应就是位运算,但是想不通怎么进行位运算,看了后面才知道,博主举了个例子就是5+17
不进位,算出5+17=12,如下图,就是小学生的运算,下面的1就是进位
这样最后12+十位的1就是22
同样,二进制也可以,5的二进制是101,17是10001,运算方法
00101
+ 10001
——————
10100
+ 10
——————
10110
最后运算就是10110就是22了
从这里也可以看出来,二进制里面,1+1和0+0,原位为0,1+0原位为1,和异或很像吧
而进位呢,对0加0、0加1、1加0而言,都不会产生进位,只有1加1时,会向前产生一个进位,而进位相当于<<一位,这样就可以开始写程序了
1 int AddWithoutArithmetic(int num1, int num2)
2 {
3 if(num2 == 0)
4 return num1;
5
6 int sum = num1 ^ num2;
7 int carry = (num1 & num2) << 1;
8
9 return AddWithoutArithmetic(sum, carry);
10 }