剑指 Offer 65. 不用加减乘除做加法
思路#
方法:使用位运算实现二进制加法#
Java实现
1 class Solution { 2 public int add(int a, int b) { 3 int sum, carry; 4 while(b != 0) //运算到没进位为止 5 { 6 sum = a ^ b; // 用异或运算求无进位和 7 carry = (a & b) << 1; 8 a = sum; 9 b = carry; 10 } 11 return a; 12 } 13 }
C++实现
注意:C++不支持负值左移!!
有2种解决方法:
(1) a&b的结果强转成unsigned int之后再左移。
1 class Solution { 2 public: 3 int add(int a, int b) 4 { 5 int sum, carry; 6 while(b != 0) //运算到没进位为止 7 { 8 sum = a ^ b; // 用异或运算求无进位和 9 carry = (unsigned int)(a & b) << 1; // C++不支持负值左移!!这里要加上unsigned int 10 a = sum; 11 b = carry; 12 } 13 return a; 14 } 15 };
(2) 用与 x 相与的方法人工去除最高位可能出现的 1, 之后再左移一位。
1 class Solution { 2 public int add(int a, int b) { 3 int x = ~(1 << 31); 4 int sum, carry; 5 while(b != 0) //运算到没进位为止 6 { 7 sum = a ^ b; // 用异或运算求无进位和 8 carry = (a & b & x) << 1; 9 a = sum; 10 b = carry; 11 } 12 return a; 13 } 14 }
参考#
分类:
剑指Offer(第2版)
标签:
位运算
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南