1

誰かが私を助けてくれることを願っています。

次のアルゴリズムは、正の数が2つある場合、または正の数と負の数がある場合の両方で機能します。ただし、両方の数値が負の場合は機能しません。

誰かが私にそれがどのように可能であるか説明できますか?

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

}

みなさん、よろしくお願いします:)

4

1 に答える 1

5

2 つの負の数の合計は負です (コメントで指摘されているように、オーバーフローが発生しない限り)。しかし、このコード:

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

基本的に最上位ビット、つまり符号ビットをクリアしているため、この結果が負になることはありません。

于 2012-05-14T12:29:49.763 に答える