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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow