Während jeder in korrekt ist sagen, dass ein "int" -Typ auf einer 32-Bit-Maschine höchstwahrscheinlich 2^32 ist, gibt es einen eklatanten Fehler in Ihrer Methodik.
Nehmen wir an, Int war 16 Bit. Sie weisen einen Wert zu, der z überläuft, sodass z selbst übergelaufen ist. Wenn Sie x + y berechnen, überlaufen Sie auch den int-Typ, es ist sehr wahrscheinlich, dass beide Fälle auf denselben Wert überlaufen, was bedeutet, dass Sie Ihre Gleichheit trotzdem treffen würden (das ist wahrscheinlich compilerabhängig, ich bin mir nicht ganz sicher, ob x + y wird gefördert.
Der richtige Weg für Ihr Experiment wäre, dass z einen größeren Datentyp als x und y hat. Zum Beispiel (Sorry für Ebene C, bin ich von C# Person nicht viel. Ich hofft es, die Methodik dargestellt, jedoch.)
int x = INT_MAX;
int y = INT_MAX;
int sum = x + y;
long long z = INT_MAX+INT_MAX;
if(sum == z)
printf("Why didn't sum overflow?!\n");
Summe und z Vergleich ist wichtig, da Vergleich x + y und z noch kommen kann in Ordnung, abhängig davon, wie der Compiler die Werbung handhabt.
Int in 32-Bit-Maschine ist 4 Bytes, die meiste Zeit. –
Haben Sie versucht, "x + y" auszudrucken, z. Vielleicht werden beide als die gleiche negative Nummer gespeichert. – MatrixFrog
Int in C# ist 32 Bit * immer *. –