LeetCode Sum of Two Integers

LeetCode Sum of Two Integers Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Example: Given a = 1 and b = 2, return 3.


不使用加减法实现两个整数之和。这其实就是用位运算实现加法,我还清楚的记得本科面搜狐实习的时候被问到这个问题,当时还没有答上来。。。 用基本位运算实现加减乘除位运算 实现加法这两篇博客介绍得很详细,可以参考之。 简单讲,对于两个二进制数a,b,异或运算(a^b)可以得到两数不加进位的和,与运算(a&b)可以得到两数每一位上的进位。所以还需要把每一位的进位依次加到之前的和里面。完整代码如下: [cpp] class Solution { public: int getSum(int a, int b) { int sum = a^b, carry = a&b; while (carry) { int tmp_a = sum; // 把和当作新的被加数a int tmp_b = carry << 1; // 把进位当作新的加数b sum = tmp_a^tmp_b; // 新的和 carry = tmp_a&tmp_b; // 新的进位 } return sum; } }; [/cpp] 本代码提交AC,用时0MS。 //负数也可以通过上述代码 如果要用位运算实现减法,通过简单的转换就能变成加法:a-b=a+(-b)。负数在计算机中的表示是补码,负数的补码等于正数的原码(正数的原码、反码和补码相等)取反加1。得到(-b)的表示之后,就可以调用上面的加法函数了。]]>

Leave a Reply

Your email address will not be published. Required fields are marked *