C# Language
Svämma över
Sök…
Heltals överflöde
Det finns en maximal kapacitet ett heltal kan lagra. Och när du går över den gränsen kommer den att gå tillbaka till den negativa sidan. För int
är det 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
För alla heltal utanför detta intervall, använd namnutrymmet System.Numerics som har datatypen BigInteger. Kolla nedan länk för mer information https://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx
Överflöde under drift
Överflöde sker också under operationen. I följande exempel är x ett int
, 1 är ett int
standard. Därför är tillägg ett int
. Och resultatet blir ett int
. Och det kommer att flyta över.
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
Du kan förhindra det genom att använda 1L. Nu kommer 1 att bli en long
och tillägg kommer att bli en long
tillägg
int x = int.MaxValue; //MaxValue is 2147483647
long y = x + 1L; //It will be OK
Console.WriteLine(y); //Will print 2147483648
Beställa frågor
Följande kod har överflöd
int x = int.MaxValue;
Console.WriteLine(x + x + 1L); //prints -1
Medan i följande kod finns det inget överflöde
int x = int.MaxValue;
Console.WriteLine(x + 1L + x); //prints 4294967295
Detta beror på ordningen från vänster till höger. I den första koden överflödar x + x
och efter det blir det long
. Å andra sidan blir x + 1L
long
och därefter läggs x
till detta värde.