Операція множення (*) повертає результат перемножування двох операндів. Стандартна операція множення визначена для типів int, uint, long, ulong, float, double і decimal. До величин інших типів її можна застосовувати, якщо для них можливе неявне перетворення до цих типів (див. рис. 3.1). Тип результату операції дорівнює “найбільшому” з типів операндів, але не менше int. Якщо обидва операнди цілочисельні або типу decimal і результат операції перевищує допустиме значення, то генерується виключення System OverflowException. Всі можливі значення для дійсних операндів приведені в таблиці 3.2. Символами х і у позначені кінцеві додатні значення, символом z - результат операції дійсного множення. Якщо результат дуже великий, він приймається рівним значенню “нескінченність”, якщо дуже малий, він приймається за 0. NAN (not а number) означає, що результат не є числом.
Таблиця 3.2.
Результати дійсного множення
*
| +y
| -у
| +0
| -0
| +∞
| -∞
| NaN
|
+x
| +z
| -z
| +0
| -0
| +∞
| -∞
| NaN
|
-x
| -z
| +z
| -0
| +0
| -∞
| +∞
| NaN
|
+0
| +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. Якщо обидва операнди цілочисельні, результат операції округляється вниз до найближчого цілого числа. Якщо дільник дорівнює 0, генерується виключення System. DivideByZeroException.
Якщо хоч би один з операндів дійсний, дробова частина результату ділення не відкидається, а всі можливі значення приведені в таблиці 3.3. Символами х і у позначені кінцеві додатні значення, символом z - результат операції дійсного ділення. Якщо результат дуже великий він приймається рівним значенню “нескінченність”, якщо дуже малий, він приймається за 0.
Таблиця 3.3.
Результати дійсного ділення
/
| +y
| -у
| +0
| -0
| +∞
| -∞
| NaN
|
+х
| +z
| -z
| +∞
| -∞
| +0
| -0
| NaN
|
-х
| -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.
Операція залишку від ділення (%) також інтерпретується по-різному для цілих, дійсних і фінансових величин. Якщо обидва операнди цілочисельні, результат операції обчислюється за формулою
х - (х / у) * у.
Якщо дільник дорівнює нулю, генерується виключення System.DivideByZeroException. Тип результату операції дорівнює “найбільшому” з типів операндів, але не менше int.
Для фінансових величин (тип decimal) при отриманні залишку від ділення на 0 і при переповнюванні генеруються відповідні виключення, при зникненні порядку результат дорівнює 0. Знак результату дорівнює знаку першого операнда. Якщо хоч би один з операндів дійсний, результат операції обчислюється за формулою
х - n * у,
де n - найбільше ціле, яке менше або дорівнює результату ділення х на у. Всі можливі комбінації значень операндів приведені в таблиці 3.4. Символами х і у позначені кінцеві додатні значення, символом z - результат операції залишку від ділення.
Таблиця 3.4.
Результати дійсного залишку від ділення
%
| +y
| -у
| +0
| -0
| +∞
| -∞
| NaN
|
+x
| +z
| z
| NaN
| NaN
| x
| x
| 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
|
Приклад застосування операцій множення, ділення і отримання залишку представлений в лістингу 3.4.
Лістинг 3.4. Операції множення, ділення і отримання залишку
using System;
namespace Consoleapplicationl
{
class Classl
{
static void Main( )
{
int x = 11, у = 4;
float z = 4;
Console.WriteLine(z * у ) ; // Результат 16
Console.WriteLine(z * 1e308 ); // Результат "нескінченність"
Console.WriteLine(x / у ); // Результат 2
Console. WriteLine(x / z ); // Результат 2.75
Console.WriteLine(x % у ); // Результат 3
Console.WriteLine(1e-324 / 1e-324 ); // Результат NaN
}
}
}
Декілька операцій одного пріоритету виконуються зліва направо. Для прикладу розглянемо вираз 2 / х • у. Ділення і множення мають один і той же пріоритет, тому спочатку 2 ділиться на х, а потім результат множиться на у. Якщо ж ми хочемо, щоб вираз х • у був в знаменнику, слід укласти його в круглі дужки або спочатку поділити чисельник на х, а потім на у:
2 / (х • у) или 2 / х /у.