C++不用“+,-“运算符号,计算两个整数之和(二进制加法运算)

该博客探讨了如何使用二进制运算实现整数加法。通过分析二进制加法的不同情况,作者指出无进位的加法对应于异或操作,而进位可以通过与操作并左移一位来保存。提供的C++代码展示了如何在一个循环中不断更新加法结果,直到没有进位为止,从而得到最终的加法结果。
摘要由CSDN通过智能技术生成

在这里插入图片描述
解题思路:
a ^ b可以得到两数相加不进位的加法结果

(a & b) << 1可以得到两数相加产生的进位
二进制的加法无外乎就以下几种情况,

1+1 = 0 (有进位)
1+0 = 1 (无进位)
0+0 = 0 (无进位)
0+1 = 1 (无进位)

仔细一看,在不考虑进位的情况下,这个不就是二进制的异或操作嘛。
所以,我们就可以把加法分成无进位的异或结果,a^b 与保存的进位相加,循环直到没有进位为止,就可以得到结果了。

再分析二进制加法中进位怎么能保存,因为只有 1+1的时候会产生进位,这不就是与操作嘛,a&b 但是进位需要在更高的一位,所以我们就左移一位嘛就搞定了,
所以,进位就可以这样保存

c = (a&b)<<1;

这样就可以用 a = (a^b) ^ c 得到一轮结果 ,但是有可能还会有进位,所以需要将这个放在循环里面就可以了。

class Solution {
public:
    int getSum(int a, int b) {
     int cin;
     while(b){
         cin=(unsigned)(a&b)<<1; // 记录a+b的进位,直到进位为0是退出
         a ^=b;
         b=cin;
     }
     return a;
    }
};
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值