不用考虑正负数的问题,因为负数在计算机中用补码表示,所以用正常的加法规则计算即可!
算法参考:(计算机加法的实现)http://www.cnblogs.com/kiven-code/archive/2012/09/15/2686922.html
class Solution {
public:
int getSum(int a, int b) {
int x,y,icarry=0;
int result=0;
//位二进制加法,icarry进位标志
for(int n=0;n<32;n++){
//取a,b的末位
x=a&1;
y=b&1;
int bit=0;
bit=(x^y)^icarry;
icarry=(x&y)|(y&icarry)|(icarry&x);
if(bit==1)
result=result|(1<<n);//倒数第n位置1
//a,b各右移一位
a=a>>1;
b=b>>1;
}
return result;
}
};