1.计算两数相加,不使用加号(+)问题。

 在刚刚做这道题的时候,开始并没有头绪,在看到提示使用位运算符的时候,但是对这些符号的了解不太记得,所以在网上找了一些关于位运算符的资料,归纳如下:(供日后参考)

1.“&”,二进制中相对位数的两个数都为1,结果才为1,否则结果为0,类似逻辑门中的与门。

2.“|”,二进制中相对位数的两个数中有一个1或都为1,结果为1,否则结果为0,类似逻辑门中的或门。

3.“~”,(单目运算符)二进制中相对位数的数为1时,结果为0,为0时,结果为1,类似逻辑门中的非门。

4.“^”,二进制中相对位数的两个数不同时,结果为1,两个数相同时结果为0,类似逻辑门中的与非门。

5.“<<”, 用来将一个数的各二进制位全部左移N位,右补0,例如:11101<<2=1110100。

6.“>>”,将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0,例如:11101>>2=00111。

 在思考的过程中发现,^运算和+法运算的不进位结果相同,&运算和加法运算的只进位结果类似。

 第一步,相加,不进位时,如果两个位都是0或1,则相加为0,不相同时则为1,所以用异或表示 
       第二步,相加,只进位,也就是说只有当两个位都是1时才进位,其它情况不进位,所以用按位与,然后左移,因为最后一位进位为0 
       第三步,递归直到没有位可进。 

	int Add(int num1, int num2)  
	   {  
	       int sum=0;  
	       int a=0;  
	       do  
	           {  
	           sum=num1^num2;  //不进位的结果
	           a=(num1&num2)<<1;  //只进位的结果
	           num1=sum;  
	           num2=a;  
	       }while(num2!=0);  
	       return num1;  
	   }  

 同时还可以使用递归函数表示

 
int add(int a,int b)
  { int carry,sum; if(b==0) return a; sum = a^b; carry = (a&b)<<1; return add(sum,carry);  }





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值