В C# имеется специальное средство, связанное с генерированием исключений, возникающих при переполнении в арифметических вычислениях. Как вам должно быть уже известно, результаты некоторых видов арифметических вычислений могут превышать диапазон представления чисел для типа данных, используемого в вычислении. В этом случае происходит так называемое
byte a, b, result; а = 127;
Ь = 127;
result = (byte)(а * b);
В этом коде произведение значений переменных а и b превышает диапазон представления чисел для типа byte. Следовательно, результат вычисления данного выражения приводит к переполнению для типа данных, сохраняемого в переменной
result.
В C# допускается указывать, будет ли в коде сгенерировано исключение при переполнении, с помощью ключевых слов checked и unchecked. Так, если требуется указать, что выражение будет проверяться на переполнение, следует использовать ключевое слово checked, а если требуется проигнорировать переполнение — ключевое слово unchecked. В последнем случае результат усекается, чтобы не выйти за пределы диапазона представления чисел для целевого типа выражения.
У ключевого слова checked имеются две общие формы. В одной форме проверяется конкретное выражение, и поэтому она называется
checked (
checked {
// проверяемые операторы
}
где
У ключевого слова unchecked также имеются две общие формы. В первой, операторной форме переполнение игнорируется при вычислении конкретного выражения. А во второй, блочной форме оно игнорируется при выполнении блока операторов:
unchecked (
// операторы, для которых переполнение игнорируется
}
где
Ниже приведен пример программы, в котором демонстрируется применение ключевых слов checked и unchecked.
// Продемонстрировать применение ключевых слов checked и unchecked.
using System;'
class CheckedDemo { static void Main() { byte a, b; byte result;
a = 127; b = 127;
try {
result = unchecked((byte) (a * b));
Console.WriteLine('Непроверенный на переполнение результат: ' + result);
result = checked((byte)(a * b)); // эта операция приводит к
// исключительной ситуации Console.WriteLine('Проверенный на переполнение результат: ' + result); //не подлежит выполнению
}
catch (OverflowException exc) {
Console.WriteLine(exc);
}
}
}
При выполнении этой программы получается следующий результат.
Непроверенный на переполнение результат: 1 System.OverflowException: Переполнение в результате выполнения арифметической операции.
в CheckedDemo.Main() в
