누군가가 나를 도울 수 있기를 바랍니다.두 개의 음수의 비트 합
저는 두 개의 양수 또는 양수와 음수가있는 경우 모두 작동하는 다음 알고리즘을 사용합니다. 그러나 두 숫자가 모두 음수이면 작동하지 않습니다.
누군가 내가 어떻게 설명 할 수 있습니까? 모든 사람에게 사전에
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);
}
감사합니다 :)
숙제와 같은 소리 – Guillaume
왼쪽으로 시프트하는 음수는 정의되지 않은 동작입니다. 귀하의 코드는 오버플로가 아닌 음수가 아닌 합계에 대한 의미론 만 정의했습니다. –