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

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

Формат операции: (тип) выражение

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

long b = 300;

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

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

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


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

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

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

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

* +y +0 -0 +∞ -∞ NaN
+x +z -z +0   +∞ -00 NaN
x -z +z -0 +0 -∞ +00 NaN
+0 +0   +0 -0 NaN NaN NaN
-0 -0 +0 -0 +0 NaN NaN NaN
+∞ +∞ -∞ NaN NaN +∞ -∞ NaN
-∞ -∞ +∞ NaN NaN -∞ +∞ NaN
NaN NaN NaN NaN NaN NaN NaN NaN

Операция деления (/) вычисляет частное от деления первого операнда на второй.

Стандартная операция деления определена для типов int, uint, long, ulong, float,

double и decimal. К величинам других типов ее можно применять, если для них

существует неявное преобразование к этим типам. Тип результата определяется

правилами преобразования (см. рис. 3.1), но не меньше int.

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

ближайшего целого числа. Если делитель равен нулю, генерируется исключение

System.DivideByZeroException.

Если хотя бы один из операндов вещественный, дробная часть результата деления

не отбрасывается, а все возможные значения приведены в табл. 3.3. Символами

х и у обозначены конечные положительные значения, символом z — результат

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

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

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

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

/ +0 -0 +x - ∞ NaN
+ Z -Z +∞ -∞ +0 -0 NaN
-x -z +Z - ∞ + ∞ -0 +0 NaN
+0 +0 -0 NaN NaN +0 -0 NaN
-0 -0 +0 NaN NaN -0 +0 NaN
+∞ +∞ - ∞ +∞ - ∞ NaN NaN NaN
- ∞ - ∞ + ∞ - ∞ + ∞ NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN

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

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

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

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

% +х +У +Z -у z +0 NaN -0 NaN +∞ X - ∞ X NaN NaN
-X -z -z NaN NaN -x -x NaN
+0 +0 +0 NaN NaN +0 +0 NaN
-0 -0 -0 NaN NaN -0 -0 NaN
+∞ NaN NaN NaN NaN NaN NaN NaN
- ∞ NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: