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

原文地址:http://zhedahht.blog.163.com/blog/static/254111742011125100605/

看到这个的题目第一个反应就是位运算,但是想不通怎么进行位运算,看了后面才知道,博主举了个例子就是5+17

不进位,算出5+17=12,如下图,就是小学生的运算,下面的1就是进位

2011060320481086.jpg

这样最后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 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值