我希望有人能帮助我。
如果我有两个正数或者一个正数和一个负数,我有下面的算法可以同时工作。但是,如果两个数字都是负数,它就不起作用。
有人能告诉我怎么可能吗?

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);

}

提前感谢大家:)

最佳答案

两个负数之和为负数(除非出现溢出,如注释中指出的那样)。但是这个密码:

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

基本上是清除最上面的位,即符号位,所以结果永远不会是负的。

10-07 14:25