1 · A + B 问题
基础:
classSolution{public:/** * @param a: An integer * @param b: An integer * @return: The sum of a and b */inta,b;intaplusb(inta,intb){// write your code herereturna+b;//返回a+b,也就是总和}};挑战:
1.无进位相加:使用 异或运算 (^)。
异或的特性是:相同为0,不同为1。0 ^ 0 = 0,0 ^ 1 = 1,1 ^ 0 = 1,1 ^ 1 = 0。
这正好对应了二进制加法中“不考虑进位”时的本位结果。
2.计算进位:使用 与运算 (&) + 左移 (<< 1)。
只有当两个位都为1时,才会产生进位。1 & 1 = 1,其他情况均为0。
进位需要加到更高一位,所以结果要左移1位:(a & b) << 1。
迭代处理:
将“无进位和”作为新的a。
将“进位值”作为新的b。
重复上述过程,直到进位b变为 0,此时的a即为最终结果。
classSolution{public:/** * @param a: An integer * @param b: An integer * @return: The sum of a and b */inta,b;intaplusb(inta,intb){// write your code herewhile(b!=0){//在b为0的时候,说明前面没有进位,a便为a+bintsum=a^b;//无进位intcarry=(a&b)<<1;//二进制两位都为1是再进位//迭代(相当于在二进制的每一位上,把b的值加给a)a=sum;//把sum赋值给ab=carry;//把carry赋值给b}returna;//返回a的值(也就是总和)}};这个题是二进制运算的一道好题目,值得推荐!
敬请期待