两个负数的按位求和

时间:2012-05-14 12:27:42

标签: c numbers sum bit-manipulation

我希望有人能够帮助我。

如果我有两个正数或正数和负数,我有以下算法。但是,如果两个数字都是负数,则不起作用。

有人能解释我怎么可能?

void sum (int p, int q) {

int sum, carry;

carry = 1;

while (carry > 0) {
    sum = p ^ q;
    carry = p & q;
    carry = carry << 1;
    p = sum;
    q = carry;
}

p = p << 1;
p = p >> 1;

printf("The result equals to %d", p);

}

提前感谢大家:)

1 个答案:

答案 0 :(得分:5)

两个负数之和为负(除非发生溢出,如注释中所指出)。但是这段代码:

p = p << 1;
p = p >> 1;

基本上是清除最顶部的位,即符号位,因此结果永远不会为负。