不用加减乘除做加法

本文讲述了如何利用移位和位操作符在牛客网的编程题中,不用加减乘除进行加法运算,通过异或和按位与操作处理进位,通过循环直至不再需要进位来求解整数加法问题,以5+7为例详细解释了过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

牛客上的一道题:不用加减乘除做加法_牛客题霸_牛客网

题目描述:

这道题需要用到移位操作符和位操作符(关于这些操作符可见之前的内容,链接在这里:http://t.csdnimg.cn/Vjp3D),我们先从简单的加法开始,如果两个数相加不需要进位,例如0101(即5)0010(即2),我们可以直接通过异或(即^)得到。

但如果需要进位的两个数字又应当如何做呢?在十进制的加法中,满十我们会向前进一位,在二进制中亦是如此,满二进一,我们可以先得到相同位都为1的位(通过&得到),然后左移一位,就是实现了进位,然后将其与相同位一个为1,一个为0的相加即可。但是这样可能并不是一次就可以的,需要用循环来实现,当得到的进位后的数为0,即不需要再进位时就得到了最终的数字。

接下来通过举例子来帮助理解:以5+7为例

 代码实现:

int Add(int num1, int num2 ) {
    int tmp = 0;
    while(num2 != 0)
    {
        tmp = num1 ^ num2; //得到每位相加,不考虑需要进位的数据
        num2 = (num1 & num2) << 1; //都为1 进位
        num1 = tmp;
    }
    return num1;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值