Buscar..


Desbordamiento de enteros

Hay una capacidad máxima que un entero puede almacenar. Y cuando superas ese límite, volverá al lado negativo. Para int , 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

Para los enteros fuera de este rango, use el espacio de nombres System.Numerics que tiene el tipo de datos BigInteger. Consulte el siguiente enlace para obtener más información https://msdn.microsoft.com/en-us/library/system.numerics.biginteger(v=vs.110).aspx

Desbordamiento durante la operación

El desbordamiento también ocurre durante la operación. En el siguiente ejemplo, x es un int , 1 es un int por defecto. Por lo tanto, la adición es una adición int . Y el resultado será un int . Y se desbordará.

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

Puedes evitar eso usando 1L. Ahora 1 será un long y la adición será un long agregado

int x = int.MaxValue;               //MaxValue is 2147483647
long y = x + 1L;                    //It will be OK
Console.WriteLine(y);               //Will print 2147483648

Asuntos de orden

Hay desbordamiento en el siguiente código.

int x = int.MaxValue;
Console.WriteLine(x + x + 1L);  //prints -1

Mientras que en el siguiente código no hay desbordamiento

int x = int.MaxValue;
Console.WriteLine(x + 1L + x);  //prints 4294967295

Esto se debe a la ordenación de izquierda a derecha de las operaciones. En el primer fragmento de código, x + x desborda y después de eso se vuelve long . Por otro lado, x + 1L vuelve long y luego se agrega x a este valor.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow