C# Language
Overloop
Zoeken…
Overloop van gehele getallen
Er is een maximale capaciteit die een geheel getal kan opslaan. En wanneer je die limiet overschrijdt, keert het terug naar de negatieve kant. Voor int
is het 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
Gebruik voor alle gehele getallen buiten dit bereik de naamruimte System.Numerics met het gegevenstype BigInteger. Controleer onderstaande link voor meer informatie https://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx
Overloop tijdens bedrijf
Overloop gebeurt ook tijdens de operatie. In het volgende voorbeeld is x een int
, is 1 standaard een int
. Daarom is toevoeging een int
toevoeging. En het resultaat zal een int
. En het zal overlopen.
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
U kunt dat voorkomen door 1L te gebruiken. Nu wordt 1 een long
en wordt toevoeging een long
toevoeging
int x = int.MaxValue; //MaxValue is 2147483647
long y = x + 1L; //It will be OK
Console.WriteLine(y); //Will print 2147483648
Bestellen doet ertoe
Er is een overloop in de volgende code
int x = int.MaxValue;
Console.WriteLine(x + x + 1L); //prints -1
Terwijl er in de volgende code geen overloop is
int x = int.MaxValue;
Console.WriteLine(x + 1L + x); //prints 4294967295
Dit komt door de volgorde van links naar rechts van de bewerkingen. In het eerste codefragment loopt x + x
over en daarna wordt het een long
. Anderzijds wordt x + 1L
long
en daarna wordt x
toegevoegd aan deze waarde.