不用+、-、×、÷数字运算符做加法

原文地址: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,和异或很像吧

而进位呢,000110而言,都不会产生进位,只有11时,会向前产生一个进位,而进位相当于<<一位,这样就可以开始写程序了

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 }

posted @ 2011-06-03 20:58  linyilong  阅读(349)  评论(1编辑  收藏  举报