当前位置:网站首页>剑指 Offer 65. 不用加减乘除做加法
剑指 Offer 65. 不用加减乘除做加法
2022-06-27 21:58:00 【InfoQ】
️剑指 Offer 65. 不用加减乘除做加法️
题目详情
输入: a = 1, b = 1
输出: 2
输入: a = 5, b = 6
输出: 11
- a, b 均可能是负数或 0。
- 结果不会溢出 32 位整数。
解题思路
- [x] 按位与 & :双目运算符,对每位取与,都为1则为1,否则为0。
- [x] 按位异或 ^ :双目运算符,对每位取异或,对应位两数不相同为1,否则为0。
- [x] 左移 << :双目运算符,a << b ,表示将a的二进制位左移b位,最右边补0。
- [x] 加法进位的特点:对于二进制,发生进位的条件是两个数所对应的二进制位均为1。


- 将a与b按位与并左移一位,即(a & b) << 1,不妨将此结果存至变量tmp,若此数值为0,就表示两数未发生进位。
- 将a与b进行非进位加法,即a ^ b,不妨将此结果赋值给a,将上面所得tmp值赋值给b。
- 此时b的值为tmp,判断b是否为0,若b不为0,需要进位,重复上述步骤,将进位数b与前一次非进位加法的值非进位相加,若b为0,不需要进位,加法过程结束,最终结果即a的值。

源代码
class Solution {
public int getSum(int a, int b) {
//两数异或相当于不进位相加,两数按位与运算能够得到需要进位的数,将此数左移再异或相加,直到该数为0,加法计算完毕
while (b != 0) {
int tmp = (a & b) << 1;
a ^= b;
b = tmp;
}
return a;
}
}
int getSum(int a, int b){
while (b) {
int tmp = (unsigned int)(a & b) << 1;//C/C++,负数情况,对有符号数左移存在溢出,先转无符号再左移对溢出情况保护处理
a ^= b;
b = tmp;
}
return a;
}
class Solution {
public:
int getSum(int a, int b) {
while (b) {
int tmp = (unsigned int)(a & b) << 1;
a ^= b;
b = tmp;
}
return a;
}
};
总结
边栏推荐
- 软件工程作业设计(1): [个人项目] 实现一个日志查看页面
- 数据仓库入门介绍
- MySQL企业级参数调优实践分享
- Systematic learning + active exploration is the most comfortable way to get started!
- Grab those duplicate genes
- 本地可视化工具连接阿里云centOS服务器的redis
- 安全省油环保 骆驼AGM启停电池魅力十足
- 吴恩达《机器学习》课程总结(11)_支持向量机
- Feign implements path escape through custom annotations
- 计数质数[枚举 -> 空间换时间]
猜你喜欢

logging日志的使用

An analysis of C language functions

智慧风电 | 图扑软件数字孪生风机设备,3D 可视化智能运维

How to quote Chinese documents when writing a foreign language?

免费、好用、强大的开源笔记软件综合评测
![[idea] idea formatting code skills](/img/06/38079517e901bc48dc4ca0f8cc63fe.jpg)
[idea] idea formatting code skills

Promise是什么

Transmitting and receiving antenna pattern
![[PCL self study: pclvisualizer] point cloud visualization tool pclvisualizer](/img/38/c7ce908bfcc5cc5cd5856996aa015b.png)
[PCL self study: pclvisualizer] point cloud visualization tool pclvisualizer
![计数质数[枚举 -> 空间换时间]](/img/11/c52e1dfce8e35307c848d12ccc6454.png)
计数质数[枚举 -> 空间换时间]
随机推荐
本地可视化工具连接阿里云centOS服务器的redis
炼金术(3): 怎样做好1个业务流程的接口对接
Sentinel
Arduino UNO通过电容的直接检测实现简易触摸开关
Oracle数据库的启停
2022 PMP project management examination agile knowledge points (3)
zotero文献管理工具安装使用
Validaterequest= "false" is a "suggestion collection" for what
CRTMP视频直播服务器部署及测试
[PCL self study: Segmentation3] PCL based point cloud segmentation: region growth segmentation
Golang uses Mongo driver operation -- Query (array related)
认识微信小程序项目的基本组成结构
用两个栈实现队列[两次先进后出便是先进先出]
线程池实现:信号量也可以理解成小等待队列
互联网业衍生出来了新的技术,新的模式,新的产业类型
快速掌握grep命令及正则表达式
[AI application] detailed parameters of Jetson Xavier nx
[AI application] detailed parameters of NVIDIA geforce RTX 3060
Logging log usage
[AI application] detailed parameters of NVIDIA geforce RTX 1080ti