Основные операции.
Рассмотрим операции, определенные в языке С++ в порядке уменьшения их приоритета: Более приоритетными являются унарные операции (для которых требуется один операнд).
Инкремент и декремент. Увеличение и уменьшение значения переменной на единицу. Эти операции имеют вид: ++ и -- .
Имеют две формы записи — префиксную и постфиксную.
Например, постфиксная запись
означает, что сначала будет выведено на экран 5, а потом x будет увеличено на единицу. То есть, эквивалентно записи:
Префиксная запись
означает, что сначала будет x будет увеличено на единицу, потом выведено на экран 6. То есть, эквивалентно записи:
Операции отрицания.
- Логическое отрицание (!) дает в результате 0, если операнд истина, и 1, если операнд — ложь.
- Арифметическое отрицание (унарный минус) (-) меняет знак операнда на противоположный.
Операции работы с памятью взятие адреса (&), разадресация (*), выделение памяти (new), освобождение памяти (delete) будут рассмотрены позже.
Бинарные и тернарная операции (состоящие из двух или трех операндов). Даны в порядке уменьшения приоритета:
Арифметические операции: умножение (*), деление (/), остаток от деления (%) (определена только для целочисленных операндов), сложение (+), вычитание (-).
В случае целочисленных операндов операция деления определяет частное от деления, т. е., если представить целочисленное выражение 𝑥 в виде 𝑎 * 𝑦 +𝑏, то 𝑎 = 𝑥/𝑦, а 𝑏 = 𝑥%𝑦.
Например, 5/2 = 2, 5%2 = 1
Операции сравнения: меньше (<), меньше или равно (<=), больше (>), больше или равно (>=), равно (==), не равно (!=) сравнивают первый операнд со вторым. Результатом является true или false (любое значение, отличное от 0 интерпретируется как true). Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции сравнения.
Поразрядные операции: применяются только к целочисленным операндам, работают с двоичными представлениями. Сравнение происходит побитово.
При поразрядной конъюнкции или поразрядном И (&) бит равен 1 тогда и только тогда, когда соответствующие биты операндов равны 1.
При поразрядной дизъюнкции или поразрядном ИЛИ (|) бит равен 1 тогда, когда хотя бы один из соответствующих битов равен 1.
При поразрядном исключающем ИЛИ (^) бит результата равен 1 тогда, когда соответствующий бит только одного из операндов равен 1.
Результатом будет соответствующее десятичное представление получившегося числа: Например,
Логические операции: (&& и ||). Операнды логических операций И (&&) и ИЛИ (||) могут быть любых типов. Преобразования типов не производится. Происходит сравнение каждого операнда с нулем (значение, равное нулю трактуется как false, ненулевые значение — как true). Результатом логической операции является true или false. Результатом логического И является true, тогда и только тогда, когда оба операнда имеют значение true. Логическое ИЛИ имеет значение true тогда, когда один из операндов имеет значение true.
Операции сравнения выполняются слева направо. Если значения первого из операндов достаточно для определения результата логической операции, то второй операнд не вычисляется.
Например, в следующем выражении:
x == 0 || y < 0
если 𝑥 равно 0 и значение первого операнда — true, результат второго операнда не вычисляется.
Оператор присваивания
Оператор присваивания имеет следующий вид:
⟨переменная⟩=⟨значение выражения⟩.
Например, a = x + 5;
Последовательность выполнения: сначала вычисляется значение выражения, потом полученный результат записывается в область памяти, занятую переменной. Поэтому очень часто встречается записи вида:
a = a + 5;
Сначала вычисляется выражение 𝑎 + 5, потом полученное значение присваивается переменной a, при этом предыдущее значение переменное уничтожается (об этом надо помнить).
Для удобства в языке С++ существуют составные операторы присваивания:
⟨переменная⟩+=⟨значение выражения⟩.
Например, a += 5; равносильно записи a = a + 5; Таким образом, можно сократить запись с арифметическими и поразрядными операциями.
Математические функции
В С++ можно подключать заголовочный файл "cmath", в котором содержатся более разнообразные математические функции.
Преобразование типов
Довольно часто в выражениях присутствуют данные разных типов. Для корректного вычисления все данных должны быть приведены к одному типу. Преобразование бывает двух видов: явное, когда программист сам приводит данные одного типа к нужному ему типу, и неявное, когда преобразование типов происходит автоматически.
Для явного преобразования нужно записать необходимый тип и в скобках переменную:
Неявное преобразование типов происходит в случае:
Преобразование в операторе присваивания — тип выражения в правой части неявно преобразуется к типу переменной левой части.
В результате, сначала вычисляем значение выражения a + b. Результат — 12.9. Потом полученный результат надо присвоить переменной типа int. Результат — 12 (просто откидывается дробная часть).