# Overflow
# Integer overflow
There is a maximum capacity an integer can store. And when you go over that limit, it will loop back to the negative side. For int
, it is 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
For any integers out of this range use namespace System.Numerics which has datatype BigInteger. Check below link for more information https://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx (opens new window)
# Overflow during operation
Overflow also happens during the operation. In the following example, x is an int
, 1 is an int
by default. Therefore addition is an int
addition. And the result will be an int
. And it will overflow.
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
You can prevent that by using 1L. Now 1 will be a long
and addition will be a long
addition
int x = int.MaxValue; //MaxValue is 2147483647
long y = x + 1L; //It will be OK
Console.WriteLine(y); //Will print 2147483648
# Ordering matters
There is overflow in the following code
int x = int.MaxValue;
Console.WriteLine(x + x + 1L); //prints -1
Whereas in the following code there is no overflow
int x = int.MaxValue;
Console.WriteLine(x + 1L + x); //prints 4294967295
This is due to the left-to-right ordering of the operations. In the first code fragment x + x
overflows and after that it becomes a long
. On the other hand x + 1L
becomes long
and after that x
is added to this value.