剑指offer65. 不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
题解:使用位运算
- 计算不进位的和 sum = a ^ b;
- 计算进位carry = a & b << 1;
- 重复上两步a = sum; b = carry;
class Solution { public: int add(int a, int b) { int sum; while (b != 0) { sum = a ^ b; b = ((unsigned int)(a & b) << 1); a = sum; } return a; } };
注意:C++不支持负值左移,要用unsign int
相关问题:
不使用新的变量,交换两个变量的值
// 基于加减法 a = a + b; b = a - b; a = a - b; // 基于异或运算 a = a ^ b; b = a ^ b; a = a ^ b;