题目描述:
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
提示:
a
,b
均可能是负数或 0- 结果不会溢出 32 位整数
解题思路(主要参考题解):
1、计算两个数之和,要求不使用四则运算符号;首先需要考虑进位符,当两个数相与,并且左移一位;得到的结果表示进位符;但是该场景会有一个问题(当 << 的左操作数为负数时,例如 -1 << 1会报错,并且需要消除最高位是1的场景),可以通过与1<<3取反相与来得到进位符;
2、通过异或操作得到当前位的结果;
具体代码:
int add(int a, int b) {
int x = ~(1 << 31);
while (b != 0) {
int c = (a & b & x) << 1; //获取进位符,不存在负号,需要屏蔽负号
a ^= b;
b = c;
}
return a;
}