Während ein Buch über programmign Tricks lesen sah, dass -0x80000000 + -0x80000000 = 0. Das ist nicht Sinn für mich so schrieb ich ein schnelles C-Programm unten zu testen und in der Tat ist die Antwort 0:Warum ist -0x80000000 + -0x80000000 == 0? Ich
#include <stdio.h>
int main()
{
int x = -0x80000000;
int y = -0x80000000;
int z = x + y;
printf("Z is: %d", z);
return 0;
}
Könnte irgendjemand etwas Licht darüber werfen, warum? Ich habe etwas über einen Überlauf gesehen, aber ich kann nicht sehen, wie ein Überlauf eher 0 verursacht als eine Ausnahme oder einen anderen Fehler. Ich bekomme keine Warnung oder irgendetwas.
Ja, es ist Überlauf. Nein, C warnt normalerweise nicht oder gibt Exceptions bei Integer-Überläufen aus. Sie sehen 0, weil die unteren 32 Bits der tatsächlichen Antwort alle 0 sind, und wenn ein Integer-Überlauf auftritt, erhalten Sie die Antwort modulo 4294967296, das heißt modulo 2^32. –