C# Language
Überlauf
Suche…
Ganzzahlüberlauf
Es gibt eine maximale Kapazität, die eine ganze Zahl speichern kann. Und wenn Sie dieses Limit überschreiten, wird es zur negativen Seite zurückkehren. Für int
ist es 2147483647
int x = int.MaxValue; //MaxValue is 2147483647
x = unchecked(x + 1); //make operation explicitly unchecked so that the example also works when the check for arithmetic overflow/underflow is enabled in the project settings
Console.WriteLine(x); //Will print -2147483648
Console.WriteLine(int.MinValue); //Same as Min value
Verwenden Sie für alle Integer-Werte außerhalb dieses Bereichs den Namespace System.Numerics mit dem Datentyp BigInteger. Unter dem Link finden Sie weitere Informationen unter https://msdn.microsoft.com/de-de/library/system.numerics.biginteger(v=vs.110).aspx
Überlauf während des Betriebs
Überlauf tritt auch während des Betriebs auf. Im folgenden Beispiel ist x ein int
, 1 ist standardmäßig ein int
. Daher ist der Zusatz ein int
Zusatz. Und das Ergebnis wird ein int
. Und es wird überlaufen.
int x = int.MaxValue; //MaxValue is 2147483647
long y = x + 1; //It will be overflown
Console.WriteLine(y); //Will print -2147483648
Console.WriteLine(int.MinValue); //Same as Min value
Sie können dies verhindern, indem Sie 1L verwenden. Jetzt wird 1 long
und die Addition wird long
int x = int.MaxValue; //MaxValue is 2147483647
long y = x + 1L; //It will be OK
Console.WriteLine(y); //Will print 2147483648
Bestellung zählt
Im folgenden Code gibt es einen Überlauf
int x = int.MaxValue;
Console.WriteLine(x + x + 1L); //prints -1
Während im folgenden Code kein Überlauf vorliegt
int x = int.MaxValue;
Console.WriteLine(x + 1L + x); //prints 4294967295
Dies liegt an der Reihenfolge der Operationen von links nach rechts. Im ersten Codefragment läuft x + x
über und wird danach long
. Auf der anderen Seite wird x + 1L
long
und danach wird x
zu diesem Wert addiert.