65. 不用加减乘除做加法
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
| 1 2 |  | 
提示:
- \(a\), \(b\) 均可能是 负数 或 \(0\)
- 结果不会溢出 \(32\) 位整数
思想
(全加器、位运算) \(O(\log n)\)
参考十进制加法:
- 各位相加不进位运算,得到sum;
- 做进位运算,得到carry;
- sum和- carry相加。
同样二进制加法也是如此。
- 两数做异或运算 ^,得到不进位的二进制和;
- 两数做与运算 &,然后左移一位,得到进位的运算结果;
- 把 不进位二进制和 与 进位运算结果 相加。即重复\(1\)、\(2\)操作,直到进位为 \(0\) 退出。
以上便是 全加器 的操作流程。
全加器示意图:

代码
| 1 2 3 4 5 6 7 8 9 10 11 12 13 |  |