Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

7.8.1Оператор произведения

Для операции вида x * y чтобы выбрать конкретную реализацию оператора, применяется разрешение перегрузки бинарного оператора (§7.3.4). Операнды преобразуются в типы параметров выбранного оператора, а тип результата является типом возвращаемого значения этого оператора.

Ниже перечислены стандартные операторы произведения. Все операторы вычисляют произведение x и y.

  • Произведение целых чисел:

int operator *(int x, int y); uint operator *(uint x, uint y); long operator *(long x, long y); ulong operator *(ulong x, ulong y);

В контексте checked если произведение выходит за пределы диапазона типа результирующего значения, возникает исключение System.OverflowException. В контексте unchecked о переполнениях не сообщается, и все старшие биты, выходящие за пределы диапазона результирующего значения, отбрасываются.

  • Произведение чисел с плавающей запятой

float operator *(float x, float y); double operator *(double x, double y);

Произведение вычисляется в соответствии с арифметическими правилами стандарта IEEE 754. В следующей таблице приведены результаты всех возможных комбинаций ненулевых конечных значений, нулей, бесконечных значений и ошибок NaN В таблице x и y являются положительными конечными значениями, а z является результатом x * y. Если результат слишком велик для целевого типа, то z равно бесконечности. Если результат слишком мал для целевого типа, то z равно нулю.

+y

–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

  • Произведение десятичных чисел.

decimal operator *(decimal x, decimal y);

Если результирующее значение слишком велико для представления в формате decimal, то возникает исключение System.OverflowException. Если полученное значение слишком мало для представления в десятичном формате, результат равен нулю. Масштаб результата до округления равен сумме масштабов двух операндов.

Произведение десятичных чисел эквивалентно использованию оператора произведения типа System.Decimal.

7.8.2Оператор деления

Для операции вида x / y чтобы выбрать конкретную реализацию оператора, применяется разрешение перегрузки бинарного оператора (§7.3.4). Операнды преобразуются в типы параметров выбранного оператора, а тип результата является типом возвращаемого значения этого оператора.

Ниже перечислены стандартные операторы деления. Все операторы вычисляют частное x и y.

  • Деление целых чисел:

int operator /(int x, int y); uint operator /(uint x, uint y); long operator /(long x, long y); ulong operator /(ulong x, ulong y);

Если значение правого операнда равно нулю, возникает исключение System.DivideByZeroException.

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

Если левый операнд является самым малым представимым значением int или long, а правый операнд равен –1, происходит переполнение. В контексте checked это приводит к возникновению исключения System.ArithmeticException (или его подкласса). В контексте unchecked возникновение исключения System.ArithmeticException (или его подкласс) или выдача сообщения о переполнении (с передачей результирующего значения равным левому операнду) определяется реализацией.

  • Деление чисел с плавающей запятой:

float operator /(float x, float y); double operator /(double x, double y);

Частное вычисляется в соответствии с арифметическими правилами стандарта IEEE 754. В следующей таблице приведены результаты всех возможных комбинаций ненулевых конечных значений, нулей, бесконечных значений и ошибок NaN В таблице x и y являются положительными конечными значениями, а z является результатом x / y. Если результат слишком велик для целевого типа, то z равно бесконечности. Если результат слишком мал для целевого типа, то z равно нулю.

+y

–y

+0

–0

+∞

–∞

NaN

+x

+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 operator /(decimal x, decimal y);

Если значение правого операнда равно нулю, возникает исключение System.DivideByZeroException. Если результирующее значение слишком велико для представления в формате decimal, то возникает исключение System.OverflowException. Если полученное значение слишком мало для представления в десятичном формате, результат равен нулю. Масштаб результата равен минимальному масштабу, который позволит сохранить результат равный ближайшему к истинному математическому результату представимому десятичному числу.

Деление десятичных чисел эквивалентно использованию оператора деления типа System.Decimal.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]