
Desbordamiento aritmético
Los operadores aritméticos (+, -, *, /) pueden producir resultados fuera del intervalo de valores posibles para el tipo numérico implicado. Aunque para encontrar información detallada, debe consultar la sección acerca del operador específico; en general, podemos decir:
-
El desbordamiento aritmético de enteros produce una excepción de desbordamiento (OverflowException) o bien elimina los bits más significativos del resultado. La división de enteros por cero siempre produce una excepción DivideByZeroException.
-
El desbordamiento aritmético o la división por cero en punto flotante no producen una excepción, ya que los tipos de punto flotante se basan en el estándar IEEE 754, que proporciona una representación para los valores infinito y NaN (Not a Number, no es un número).
-
El desbordamiento aritmético de valores de tipo decimal siempre produce una excepción OverflowException. La división de decimales por cero siempre produce una excepción DivideByZeroException.
Cuando se produce un desbordamiento de enteros, lo que ocurre depende del contexto de la ejecución, el cual puede ser checked o unchecked. En un contexto checked (comprobado), se produce una excepción OverflowException. En un contexto unchecked (no comprobado), los bits más significativos del resultado no se tienen en cuenta y la ejecución continúa. De esta forma, C# permite elegir entre atender o desatender el desbordamiento.
Además de los operadores aritméticos, las conversiones entre tipos integrales también pueden producir desbordamiento; por ejemplo, al convertir un tipo long en un tipo int, y están sometidas al tipo de ejecución checked o unchecked. Sin embargo, los operadores bit a bit y los operadores de desplazamiento nunca producen desbordamiento.