位实现加减乘除专题
在计算机中,位运算的效率比加减乘数效率更高,因此在高性能软件的源码中大量应用,而且计算机里各种运算本质上都是位运算。本专题我们就研究几个相关问题。
两整数之和
题目 :
LeetCode 371.两整数之和 :
371. 两整数之和
分析 :
两个位加的时候,我们无非就考虑两个问题: 进位部分是什么,不进位部分是什么。从上面的结果可以看到,对于a和b两个数不进位部分的情况是: 相同为0,不同为1,这不就是a ^ b吗?
而对于进位,我们发现只有a和b都是1的时候才会进位,而且进位只能是1,这不就是a&b=1吗? 然后位数由1位变成了两位,也就是上面的 4 的样子,那怎么将1向前挪一下呢? 手动移位一下就好了,也就是(a & b) << 1。所以我们得到两条结论:
- 不进位部分: 用a ^ b计算就可以了。
- 是否进位,以及进位值使用(a & b ) << 1计算就可以了
解析 :
class Solution {
public int getSum(int a, int b) {
while(b != 0){
int temp = (a & b) << 1;
a = a ^ b;
b = temp;
}
return a;
}
}
这期就到这里 , 下期见!