Программирование >>  Обработка исключительных ситуаций 

1 ... 12 13 14 [ 15 ] 16 17 18 ... 142


Явное преобразованиетипа

Операция используется, как и следует из ее названия, для явного преобразования величины из одного типа в другой. Это требуется в том случае, когда неявного преобразования не существует. При преобразовании из более длинного типа в более короткий возможна потеря информации, если исходное значение

выходит за пределы диапазона результирующего типа . Формат операции: ( тип ) выражение

Здесь тип - это имя того типа, в который осуществляется преобразование, а i-ражение чаще всего представляет собой имя переменной, например:

long b = 300;

int а = (int) b; данные не теряются

byte d = (byte) a; данные теряются

Преобразование типа часто применяется для ссылочных типов при работе с иерархиями объектов.

Эта потеря никак не диагностируется, то есть остается на совести программиста.

Логическое отрицание (! ) определено для типа bool. Результат операции - значение false, если операнд равен true, и значение true, если операнд равен false.

Поразрядное отрицание (~), часто называемое побитовым, инвертирует каждый разряд в двоичном представлении операнда типа int, uint, long или ulong.

Операции отрицания представлены в листинге 3.3.

Листинг 3.3. Операции отрицания BSing System;

namespace ConsoleApplicationl { class Ciassl

{ static void MainO

sbyte a = 3, b = -63, с = 126; bool d = true;

Console.WriteLineC -a ) Результат -3

Console.WriteLineC -c ) Результат -126

Console.WriteLineC !d ) Результат false

Console.WriteLineC ~a ) Результат -4

Console.WriteLineC ~b ) Результат 62

Console.WriteLineC ~c ) Результат -127



+ oo

+ 00

+ оо

+ oo

Операция деления (I) вычисляет частное от деления первого операнда на второй. Стандартная операция деления определена для типов int, uint, long, ulong, float, double и decimal. К величинам других типов ее можно применять, если для них существует неявное преобразование к этим типам. Тип результата определяется правилами преобразования (см. рис. 3.1), но не меньше int.

Если оба операнда целочисленные, результат операции округляется вниз до ближайшего целого числа. Если делитель равен нулю, генерируется исключение System. Di vi deByZeroExcept i on.

Если хотя бы один из операндов вещественный, дробная часть результата деления не отбрасывается, а все возможные значения приведены в табл. 3.3. Символами х и у обозначены конечные положительные значения, символом z - результат

1 В проверяемом контексте. В непроверяемом исключение не выбрасывается, зато отбрасываются избыточные биты.

Об особых значениях вещественных величин упоминалось на с. 34.

Умножение, деление и остаток от деления

Операция умножения (*) возвращает результат перемножения двух операндов. Стандартная операция умножения определена для типов int, ui nt, long, ulong, float, double и decimal. К величинам других типов ее можно применять, если для них возможно неявное преобразование к этим типам (см. рис. 3.1). Тип результата операции равен наибольшему из типов операндов, но не менее int.

Если оба операнда целочисленные или типа decimal и результат операции слишком велик для представления с помощью заданного типа, генерируется исключение System. OverflowExcepti on1.

Все возможные значения для вещественных операндов приведены в табл. 3.2. Символами х и у обозначены конечные положительные значения, символом z - результат операции вещественного умножения. Если результат слишком велик для представления с помощью заданного типа, он принимается равным значению бесконечность , если слишком мал, он принимается за 0. NaN (not a number) означает, что результат не является числом.

Таблица 3.2. Результаты вещественного умножения



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

Таблица 3.3. Результаты вещественного деления

+ 00

+ oo

- 00

- oo

Для финансовых величин (тип decimal) при делении на 0 и переполнении генерируются соответствующие исключения, при исчезновении порядка результат равен 0.

Операция остатка от деления (%) также интерпретируется по-разному для целых, вещественных и финансовых величин. Если оба операнда целочисленные, результат операции вычисляется по формуле х - (х / у) * у. Если делитель равен нулю, генерируется исключение System.DivideByZeroException. Тип результата операции равен наибольшему из типов операндов, но не менее int (см. рис. 3.1).

Если хотя бы один из операндов вещественный, результат операции вычисляется по формуле х - п * у, где п - наибольшее целое, меньшее или равное результату деления х на у. Все возможные комбинации значений операндов приведены в табл. 3.4. Символами х и у обозначены конечные положительные значения, символом z - результат операции остатка от деления.

Таблица 3.4. Результаты вещественного остатка от деления

Для финансовых величин (тип decimal) при получении остатка от деления на О и при переполнении генерируются соответствующие исключения, при исчезновении порядка результат равен 0. Знак результата равен знаку первого операнда.



1 ... 12 13 14 [ 15 ] 16 17 18 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика