Handling Arithmetic Overflow

When you are dealing with integer values which are in higher amounts, you might arrive at a situation where the program gives you the wrong output.

Introduction

When you are dealing with the integer values which are in higher amounts, you might arrive at a situation where the program gives you the wrong output.

First, we need to know the ranges of every datatype so that the explanation will be easier.

DatatypeRange
int (32-bit signed)-2,147,483,648 to 2,147,483,648
long (64-bit signed)-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

So, when we use int datatype and if value exceeds the range, the value is taken as -1.

Static assignment of values higher than the range will show compile errors, but if the value is assigned dynamically the compiler doesn’t show any errors.

Whenever arithmetic overflow occurs, the C# compiler is made capable of internally handling the result and sends out an unexpected output.

Example 1 - Code Snippet

  1. int maxValue = 2147483648;  

The code will be not compiled as we see a static assignment which is beyond the range. The C# compiler is capable of checking the range and also provides an alternative solution too.

The below compiler error message is thrown.

Handling Arithmetic Overflow 

Example 2 - Code Snippet

  1. int maxValue = 2147483647;  
  2. maxValue += 1;  
  3. Console.WriteLine(maxValue);  

Output

-2147483648;

The output is completely unexpected as the value crossed the range of “int”.

Checked Keyword

So, we face a problematic situation now and we need to handle these kinds of situations.

This is called “Arithmetic Overflow”.

C# provides checked keyword to handle this issue.

The checked way of the same implementation would be like below.

Code Snippet

  1. int maxValue = 2147483647;  
  2. int output = -10;  
  3. try {  
  4.     output = checked(maxValue + 10);  
  5. catch (OverflowException e) {  
  6.     Console.WriteLine("Output = " + output);  
  7. }  

Output

-10

Conclusion

  • Arithmetic Overflow exception was handled successfully.
  • Based on your need, you can alter the statement inside catch block to match your requirements.