Пример.

Пример использования оператора unchecked.

Операторы checked и unchecked

Результат

 

Операторы checked и unchecked используются для управления контекстом проверки переполнения для арифметических операций и преобразований целого типа.

выражение_checked:
checked ( выражение )

выражение_unchecked:
unchecked ( выражение )

Оператор checked вычисляет содержащееся в нем выражение в проверяемом контексте.

Оператор unchecked — в непроверяемом. Используется для подавления проверки переполнения при выполнении арифметических операций и преобразований с данными целого типа. В непроверяемом контексте арифметическое переполнение будет проигнорировано, а результат усечен.

В контексте checked для неконстантных выражений (выражений, которые вычисляются во время выполнения), возникает исключение System.OverflowException.

Явное преобразование из int к short, где

short От -32 768 до 32 767 16-разрядное целое число со знаком System.Int16

 

 

int От -2 147 483 648 до 2 147 483 647 32-разрядное целое число со знаком System.Int32

 

int i = 2147483647;

short ixx = unchecked((short)i);

 

 

 

Примериспользования оператора checked.

Для неконстантных выражений (выражений, которые вычисляются во время выполнения), не заключенных в операторы или инструкции checked или unchecked, контекстом проверки переполнения по умолчанию является unchecked, если внешние факторы (например, переключатели компилятора и конфигурация среды исполнения) не заставляют установить контекст checked.

Пример.

int i = 2147483647;

short ixx = (short)i;

 

Если размер исходного типа превышает размер конечного, дополнительные самые старшие разряды исходного значения отбрасываются.

Если размер исходного типа меньше размера конечного, размер исходного значения расширяется до размера конечного типа за счет добавления знака или нулей.

 

 

Для преобразований из типа decimal к целому типу исходное значение округляется в сторону нуля до ближайшего целого значения. Результатом преобразования является полученное целое значение.

Пример.

decimal d = 10000.5m;

int i =(int)d;

Console.WriteLine(i);

 

 

Для типов с плавающей запятой и типа decimal отсутствует неявное преобразование, поэтому для преобразования между этими двумя типами следует использовать приведение. Пример.

decimal myMoney = 99.9m;

double x = (double)myMoney;

Console.WriteLine(x);

Если убрать оператор явного преобразования, то программа завершится с ошибкой

Ошибка 1 Не удается неявно преобразовать тип "decimal" в "double". Существует явное преобразование (возможно, пропущено приведение типов)