感谢评论区的网恋教父@带带大师兄 提供的解答,我这里个人理解一遍当作记录:
static修饰函数表明该函数作用域为该文件。
将加法看作二进制的 非进位和+进位和
下面代码中的sum和c分别表示非进位和,进位和。
至于为什么。。。手动算几次就明白了。。。
//不用+-*/的加法
class Solution {
public:
static int add(int a,int b)
{
int sum = 0, c = 0;//和,进位
while (b != 0)
{
sum = a ^ b;//异或运算表示二进制的非进位和
c = (a & b) << 1;//与运算左移一位补0表示二进制的进位和;注意<<的优先级高于&,需要括号
//更新a,b为非进位和,进位和
a = sum;
b = c; //进位为0时结束运算
}
return a;
}
};
本文介绍了一种不使用基本算术运算符的加法算法,通过异或和与运算来实现二进制加法。具体地,通过异或运算计算非进位和,与运算结合左移操作计算进位和,迭代直至进位为0,最终得到两数之和。
341

被折叠的 条评论
为什么被折叠?



