使用位运算计算两个整数的加减

本文详细介绍了整数加法的两种实现方式:递归和非递归。通过位运算,解释了如何计算两个整数的和,并在非递归方式中使用循环直至进位为0。提供了具体的代码实现,帮助理解整数加法的基本原理。

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

1、加法:

两个整数的加法可以转换成:两个整数各自2进制位的纯加法和s【不包括进位】,记录两个整数在哪一位上有进位的变量carry。然后结果就转化为了 s+carry。接着,再使用相同的方式,直到carry为0为止。此时,相当于被加数为0,和就是加数本身。

递归方式:

1 // 使用位运算计算两个数的加法
2         int sum(int a, int b)
3         {
4             if (b == 0) return a;
5             int s = a ^ b;
6             int carry = (a & b) << 1;  // 如果两个数对应的位都是1,说明该位有一个进位
7             // 此时的和即为 sum + carry
8             return sum(s, carry);
9         }

非递归方式:

 1         int _sum(int a, int b)
 2         {
 3             int s = a ^ b;
 4             int carry = (a & b) << 1;  // 如果两个数对应的位都是1,说明该位有一个进位
 5             while (carry != 0)
 6             {
 7                 a = s;
 8                 b = carry;
 9                 s = a ^ b;
10                 carry = (a & b) << 1;
11             }
12 
13             return s;
14         } 

 

转载于:https://www.cnblogs.com/kylinxue/p/4797495.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值