【剑指Offer-65】不用加减乘除做加法
问题
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
解答
class Solution {
public:
int add(int a, int b) {
while (b) {
int c = (unsigned)(a & b) << 1;
a ^= b;
b = c;
}
return a;
}
};
重点思路
无进位和 与 异或运算 规律相同,进位 和 与运算 规律相同(并需左移一位)。因此,无进位和n
与进位c
的计算公式如下:

由于n(无进位和)+c(进位和)
部分也不能使用加法,我们可以将无进位和与进位和作为新的a
与b
再做相同的计算,直到进位和为0。
由于C++对负数的左移运算没有定义,所以我们要将有符号数转为无符号数,再进行移位操作。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
【推荐】园子的不务正业:向创业开发者推荐「楼盘」- 杭州云谷中心
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】天翼云爆款云主机2核2G限时秒杀,28.8元/年起!立即抢购
· Ribbon LoadBalancer: 开源的客户端式负载均衡框架
· EF Core:再谈普通实体关系与 Owned 关系的区别
· C++20新增属性[[no_unique_address]]详解
· 线上频繁FullGC?竟是Log4j2的这个“特性”坑了我
· 聊一聊 .NET 中的 CancellationTokenSource
· 刚刚 Java 25 炸裂发布!让 Java 再次伟大
· 一款基于 .NET 开源美观、功能丰富的串口调试工具
· .NET 10 是微软 AI 战略的技术承重墙
· Runtime Async - 步入高性能异步时代
· AI 开发者工具 TOP 榜:9 大分类 + 20种工具