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 |
|