写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
位运算的知识点:
a^b -> 得到计算后的低位信息, 丢失进位信息
(unsigned) (a&b) << 1 -> 得到计算后每一位的进位信息, 通过左移之后, 交给高位
int add(int a, int b){
int temp;
while(a != 0)
{
//temp保存每一位加法后的低位信息
temp = a ^ b;
//a保存的是进位信息, 进位信息0或者1不代表正负, 因此用unsigned
a = (unsigned) (a & b) << 1;
b = temp;
}
return b;
}
时间复杂度: 1
空间复杂度: 1
网友评论