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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow