Поделиться через


Операторы умножения и оператор модуля

expression * expression 
 expression / expression 
 expression % expression

Заметки

Ниже перечислены мультипликативные операторы.

  • Умножение (*)

  • Деление (/)

  • Модуль (остаток от деления) (%)

Эти бинарные операторы имеют ассоциативность слева направо.

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

Оператор умножения возвращает результат умножения первого операнда на второй.

Оператор деления возвращает результат деления первого операнда на второй.

Оператор модуля возвращает остаток, полученный в результате следующего выражения, где e1 — первый операнд, а e2 — второй операнд: e1 – (e1 / e2) * e2, где оба операнда принадлежат целочисленному типу.

Деление на 0 в выражении деления или модуля не определено и вызывает ошибку времени выполнения. Поэтому следующие выражения создают неопределенные ошибочные результаты.

i % 0
f / 0.0

Если оба операнда в выражении умножения, деления или модуля имеют одинаковые знаки, результат будет положительным. В противном случае результат будет отрицательным. Знак результата операции модуля определяется реализацией.

Примечание

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

Блок, относящийся только к системам Майкрософт

В Microsoft C++ знак результата выражения модуля всегда совпадает со знаком первого операнда.

Завершение блока, относящегося только к системам Майкрософт

Если значение, полученное при делении двух целых чисел, неточное и только один операнд является отрицательным, результатом будет наибольшее целое число (по величине без учета знака), которое меньше точного значения, которое было бы получено при операции деления. Например, при делении –11 / 3 получено значение –3,666666666. Результат целочисленного деления — 3.

Связь между мультипликативными операторами определяется идентификатором (e1 / e2) * e2 + e1 % e2 == e1.

Пример

В следующей программе показаны мультипликативные операторы. Обратите внимание, что хотя бы один операнд 10 / 3 должен быть явно приведен к типу float во избежание усечения, чтобы оба операнда принадлежали типу float перед делением.

// expre_Multiplicative_Operators.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main() {
   int x = 3, y = 6, z = 10;
   cout  << "3 * 6 is " << x * y << endl
         << "6 / 3 is " << y / x << endl
         << "10 % 3 is " << z % x << endl
         << "10 / 3 is " << (float) z / x << endl;
}

См. также

Ссылки

Выражения с бинарными операторами

Операторы C++

Операторы C++, приоритет и ассоциативность

Операторы умножения в C