![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Выполнение математических операций
Бинарная арифметика Анализ выражений Определение порядка операций Выполнение унарных операций Использование операторов присвоения
придуманы математиками не только для того, чтобы было что опи- сывать и в чем сохранять значения. Над переменными можно вы- полнять самые разные действия: складывать, перемножать, вычитать и т.д. Список возможных операций достаточно обширен. Эти основные математические операции используются и в программах C++. Ведь приложения без вычислительных возможностей себя совершенно не оправдывают. Кому нужна страховая программа, которая не может подсчитать даже суммы взносов? Операции C++ внешне идентичны обыкновенным арифметическим операциям, выполняемым на клочке бумаги; разве что применяемые в вычислениях переменные перед использованием нужно объявлять:
int var2 = 1; varl 2 * var2; В этом примере объявлены две переменные, var l и var2. Переменной var2 присвое- но начальное значение var l определена как результат удвоения переменной var2. В этой главе вы найдете описание всего множества математических операторов C++.
Бинарными называются операторы, которые имеют два аргумента. В выражениях типа var l op var2 оператор op бинарный. Самыми распространенными бинарными операторами являются простые математические операции, изучаемые еще за школь- ными партами. Бинарные операции, которые поддерживает C++, приведены в табл. 3.1. Таблица Математическиеоперациивпорядкеприоритета ПРИОРИТЕТ ОПЕРАТОР ЗНАЧЕНИЕ 1 + 1 - (унарный) 2 ++ (унарный) 2 — (унарный) Реально ничего не изменяет Возвращает противоположное по знаку, равное по модулю значение Оператор инкремента, увеличивает значение аргумента на 1 Оператор декремента, уменьшает значение аргумента на 1 Глава 3. Выполнение математических операций 39 ПРИОРИТЕТ ОПЕРАТОР ЗНАЧЕНИЕ Окончаниетабл. 3 (бинарный) 3 / (бинарный) 3 (бинарный) 4 +(бинарный) 4 - (бинарный) 5 (специальные) Умножение Деление Остаток (деление по модулю) Сложение Вычитание Операторы присвоений
float var = 133 / 12; Значение большинства вам хорошо известно еще из начальной школы, кроме разве что операции деления по модулю. По своей сути этот оператор означает получение остатка от деления. Например, 4 входит в 15 три раза, и остаток при этом составляет 3. Выражаясь терминами C++, 15, деленное по модулю 4, равно 3. var % //переменной var присваивается значение 3 Программисты всегда пытаются удивить непрограммистов, а потому в C++ деле- ние по модулю определяется так: IntDivisor эквивалентно IntValue - (IntValue / IntDivisor)* IntDivisor Вот пример: 15 % 4 равн о 15 - (15/4) * 4 15 3*4 15 - 12 3
Для действительных переменных оператор деления по модулю не опреде- лен, поскольку он целиком основан на использовании округления (округления рассматривались в главе 2, "Премудрости объявления пере- менных").
Самым распространенным видом инструкций в C++ является выражение. Выра- жением в C++ называют любую последовательность операторов (длиной не меньше одного), которая возвращает значение. Все выражения типизированы. Тип выражения определяется типом возвращаемого значения. Например, значение выражения 1 + 2 равняется 3, следовательно, это целочисленное выражение (тут нужно вспомнить, что константы без дробной части определяются как имеющие тип int) . Синтаксическая конструкция, включающая математический оператор, является выражением, так как в результате выполнения любой операции получается число.
40 Часть Первое знакомство с C++
Он тоже представляет собой выражение, потому что его значение 1, а тип int . В операторе z = х * у + можно выделить пять выражений: х * у + х * у X У
Необычный аспект C++ состоит в том, что выражение само по себе является завер- шенной инструкцией, т.е. упомянутое выражение — завершенная инструкция C++.
Все операторы выполняют определенные функции. Чтобы установить порядок вы- полнения различных операторов, им назначены приоритеты. Рассмотрим выражение i n t v a r = 2 * 3 + 1 ; Если сложение выполнить перед умножением, то значением выражения будет 2 * 4 = 8. Если сперва выполнить умножение, то получим значение б + 1 7. Приоритеты операций определяют порядок выполнения вычислений. Из табл. 3.1 видно, что приоритет операции умножения выше, чем сложения, т.е. результат все же равен 7 {приоритеты используются и в арифметике, и C++ следует именно им). А что происходит, когда в одном выражении используется два оператора с одина- ковым приоритетом? in t va r Как в этом случае следует поступить: сначала 8 поделить на 2 или 2 на 4? Если в одном выражении присутствуют операции с одинаковыми приоритетами, они выполняются слева направо (то же правило применяется и в арифметике). Поэтому в предыдущем примере сперва делим 8 на 4, получая 2, а затем делим его на 2, получая ответ — 1. В выражении х / 100 + 32 х делится на 100 и к результату добавляется 32. Но что, если программисту нужно по- делить х на сумму 100 и 32? В таком случае ему придется использовать скобки: х / (100 + 32) При вычислении такого выражения х будет делиться на 132. Заметим, что начальное выражение х / 100 32 идентично следующему: (х / 100) + 32 Почему это действительно так? Потому что C++ сначала выполняет операции с высшим приоритетом. А приоритет операций умножения и деления выше, чем сло- жения и вычитания. Поэтому скобки, указывающие на высокий приоритет данной операции, можно опустить. На основе сказанного можно сделать вывод: в случае необходимости приоритет оператора можно повысить, используя скобки. |
Последнее изменение этой страницы: 2019-04-19; Просмотров: 257; Нарушение авторского права страницы