每天一道算法题
问题描述:
- 给出两个整数 a 和 b,求它们的和。
说明:
- a 和 b 都是 32 位整数
- 可以使用位运算符
- 不使用 + 等算数运算符
解题思路
首先我先看 a = 4,b = 5 相加的结果
0 1 0 0
+ 0 1 0 1
= 1 0 0 1
‘+’ 运算规则不用多说,就是对应位相加,逢 2 进 1;然后我们再看 a ^ b 的结果
0 1 0 0
^ 0 1 0 1
= 0 0 0 1
异或运算有一个别名叫做:不进位加法,a ^ b 就是 a + b 相加之后,该进位的地方不进位的结果。
所以接下考虑哪些地方需要进位,自然是 a 和 b 里都是 1 的地方。
a & b 就是 a 和 b 里都是 1 的位置, a & b << 1 就是进位。
0 1 0 0
& 0 1 0 1
= 0 1 0 0
0100 << 1 = 1000
所以得出结论:a + b = (a ^ b) +