转载地址:https://ych0112xzz.github.io/2016/10/27/OperationwithBits/
位运算实现整数加法
方法
- x^y //执行加法,不考虑进位。
- (x&y)<<1 //进位操作
解释
在这里我们先用1位数的加法来进行,在不考虑进位的基础上,如下
1
2
3
4
|
1 + 1 = 0
1 + 0 = 1
0 + 1 = 1
0 + 0 = 0
|
很明显这几个表达式可以用位运算的异或(“^”)操作来代替,如下
1
2
3
4
|
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
|
这样我们就完成了简单的一位数加法,那么要进行二位的加法,这个方法可行不可行呢?肯定是不行的,矛盾就在于,如何去获取进位?要获取进位我们可以如下思考:
1
2
3
4
|
0 + 0 = 0
1 + 0 = 0
0 + 1 = 0
1 + 1 = 1
|
换个角度看就是这样
1
2
3
4
|
0 & 0 = 不进位
1 & 0 = 不进位
0 & 1 = 不进位
1 & 1 = 进位
|
正好,在位运算中,我们用”<<”表示向左移动一位,也就是“进位”。那么我们就可以得到如下的表达式
- 进位可以用如下表示: