目录
题目:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
数据范围:两个数都满足 0≤n≤1000;
基础知识补充:
位操作符 (只能应用于整数):
& 按位与 :同为真则为1,反之则为0(二进制)
^ 按位异或:相同为0,相异为1(二进制)
移位操作符:
<< 左边抛弃右边补0
>> 分为算术右移和逻辑右移
{逻辑右移:右边抛弃 左边补0; 算术右移:右边抛弃 左边补符号位}
思路:
先计算忽略进位的和(通过a^b实现), 进而计算进位值(通过a&b并进行移位实现) 然后把前两步的结果相加 还是循环(设置循环条件->进位为0) 直至进位为0
最终代码:
int Add(int num1, int num2)
{
int a = 0;
int b = 0;
while (num2 != 0)
{
//不考虑进位
a = num1 ^ num2; //0101 0110 0011
//考虑进位
b = (num1 & num2) << 1; //0100 1000
num1 = a;
num2 = b;
}
return num1;
}