Таблица 3.1. Математические операции в порядке приоритета
_________________
Приоритет — Оператор — Значение
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
1 — +( унарный ) — Реально ничего не изменяет
1 — -( унарный ) — Возвращает противоположное по знаку, равное по модулю значение
2 — ++( унарный ) — Оператор инкремента, увеличивает значение аргумента на 1
_________________
50 стр. Часть 1. Первое знакомство с С++
2 — --( унарный ) — Оператор декремента, уменьшает значение аргумента на 1
3 — *( бинарный ) — Умножение
3 — /( бинарный ) — Деление
3 — %( бинарный ) — Остаток ( деление по модулю )
4 — +( бинарный ) — Сложение
4 — -( бинарный ) — Вычитание
5 — =, *=, %=, +=, -=( специальные ) — Операторы присвоения
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Как видите, операторы умножения, деления, деления по модулю, сложения и вычитания имеют вид обычных математических операций. Да они и работают так же, как соответствующие им арифметические операции:
float var = 133 / 12 ;
Значение большинства операторов вам хорошо известно ещё из начальной школы, кроме разве что операции деления по модулю.
По своей сути этот оператор означает получение остатка от деления. Например, 4 входит в 15 три раза, и остаток при этом составляет 3. Выражаясь терминами С++, 15, делённое по модулю 4, равно 3.
int var = 15 % 4 ; /*переменной var присваивается значение 3 */
Программисты всегда пытаются удивить непрограммистов, а потому в С++ деление по модулю определяется так:
IntValue % IntDivisor
что эквивалентно
IntValue - ( IntValue / IntDivisor ) * IntDivisor
Вот пример:
15 % 4 равно 15 - ( 15/4 ) * 4
15 - 3 * 4
15 - 12
3

«Для действительных переменных оператор деления по модулю не определён, поскольку он целиком основан на использовании округления ( округления рассматривались в главе 2, "Премудрости объявления переменных").»
[ Атас! ]
Самый распространённый вид инструкций в С++ — выражение. Выражением в С++ называют любую последовательность операторов ( длиной не меньше одного ), которая возвращает значение. Все выражения типизированы. Тип выражения определяется типом возвращаемого значения. Например, значение выражения 1 + 2 равняется 3, следовательно, это целочисленное выражение ( тут нужно вспомнить, что константы без дробной части определяются как имеющие тип int ). Синтаксическая конструкция, включающая математический оператор, является выражением, так как в результате выполнения любой операции получается число.
_________________
51 стр. Глава 3. Выполнение математических операций
Выражения бывают как сложными, так и крайне простыми. С++ понимает под выражением любой завершённый оператор. Поэтому корректным оператором является, например, 1 ; . Он тоже представляет собой выражение, потому что его значение 1, а тип int . В операторе
z = х * у + w;
можно выделить пять выражений:
x * у + w
x * у
x
y
w
Необычный аспект С++ состоит в том, что выражение само по себе является завершённой инструкцией, т.е. упомянутое выражение 1 ; — завершённая инструкция С++.
►Определение порядка операций...52
Все операторы выполняют определённые функции. Чтобы установить порядок выполнения различных операторов, им назначены приоритеты. Рассмотрим выражение
int var = 2 * 3 + 1 ;
Если сложение выполнить перед умножением, то значением выражения будет 2 * 4 = 8 . Если сперва выполнить умножение, то получим значение 6 + 1 = 7.
Приоритеты операций определяют порядок выполнения вычислений. Из табл. 3.1 видно, что приоритет операции умножения выше, чем сложения, т.е. результат всё же равен 7 ( приоритеты используются также в арифметике, и С++ следует именно им ).
А что происходит, когда в одном выражении используется два оператора с одинаковым приоритетом?
int var = 8 / 4 / 2 ;
Как в этом случае следует поступить :сначала 8 поделить на 4 или 4 на 2? Если в одном выражении присутствуют операции с одинаковыми приоритетами, они выполняются слева направо ( то же правило применяется и в арифметике ). Поэтому в предыдущем примере сперва делим 8 на 4, получая 2, а затем делим его на 2, получая ответ — 1.
Читать дальше