- 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号
- 数据范围:两个数都满足 −10≤n≤1000
- 进阶:空间复杂度 O(1),时间复杂度 O(1)
- 输入:1,2
- 返回值:3
- 计算机中存整数n是用补码存的
- 如果n为正数,则原码=反码=补码
- 如果n为负数,则补码=反码+1
- 补码就是解决减法的问题,计算机把减法看做加法来运算
func Add(num1 int, num2 int) int {
/*
num2 初始如果等于 0,那么结果就是 num1
进入循环后,就是进位的值,进位的值为 0 了,加法结束了
*/
for num2 != 0 {
// 相加各位的值,不算进位,就相当于各位做异或操作
tmp := num1 ^ num2
// 计算进位值,相当于各位做与操作后,再向左移一位得到
num2 = (num1 & num2) << 1 // num2 被当做放进位的容器
num1 = tmp // num1 被当做放相加各位的值的容器
}
return num1
}