Question #6
What is the arithmetic overflow and how is it handled in .NET?
Answer #6
It is a situation when the result of an arithmetic operation exceeds (is outside of) the range of a given numeric type. For example the maximum value for byte type in .NET is 255. So in the following example, an operation a+b will cause an overflow:
What is the arithmetic overflow and how is it handled in .NET?
Answer #6
It is a situation when the result of an arithmetic operation exceeds (is outside of) the range of a given numeric type. For example the maximum value for byte type in .NET is 255. So in the following example, an operation a+b will cause an overflow:
byte a = 255; byte b = 20; byte c = a + b;The final result depends on the used numeric types:
- For integer types either OverflowException will be thrown or the result will be trimmed/cropped (the default behaviour). It depends on the compiler configuration and usage of checked / unchecked keywords.
- For floating point types OverflowException will never be thrown. Instead the overflow will lead either to the positive or the negative infinity.
- For decimal type OverflowException will be always thrown.
var b = byte.MaxValue; //The result will be zero because: //b = 255 = 1111 1111 //b++ = 256 = 1 0000 0000 //The result has 9 bits so the result will be trimmed to 8 bits what gives 0000 0000 b++; checked { b = byte.MaxValue; //Exception will be thrown b++; } var f = float.MaxValue; //The result will be float.PositiveInfinity f *= 2; decimal d = decimal.MaxValue; //Exception will be thrown d++;