- •Алфавит языка
- •Идентификаторы
- •Ключевые слова
- •Знаки операций
- •Константы
- •Комментарии
- •Концепция типа данных
- •Простые типы данных
- •Целый тип (int)
- •Символьный тип (char)
- •Расширенный символьный тип (wchar_t)
- •Логический тип (bool)
- •Типы с плавающей точкой (float, double и longdouble)
- •Предварительные замечания о функциях ввода/вывода
- •Переменные
- •Операции
- •Выражения
- •Оператор "выражение"
- •Операторы ветвления Условный оператор if
- •Оператор switch
- •Цикл с предусловием (while)
- •Цикл с постусловием (dowhile)
- •Цикл с параметром (for)
- •Оператор goto
- •Оператор break
- •Оператор continue
- •Оператор return
- •Инициализация указателей
- •Операции с указателями
- •Переименование типов (typedef)
- •Глобальные переменные
- •Возвращаемое значение
- •Передача массивов в качестве параметров
- •Передача имен функций в качестве параметров
- •Параметры со значениями по умолчанию
- •Функции ввода/вывода
- •Открытие потока
- •Ввод/вывод в поток
- •Закрытие потока
- •Функции работы со строками и символами
- •Математические функции
- •Директива #include
- •Директива #define
Операции
В таблице 1.5 приведено большинство операций, определенных в языке С++, в соответствии с их приоритетами (по убыванию приоритетов, операции с разными приоритетами разделены чертой).
Таблица 1.5 Основные операции языка С++
Операция |
Краткое описание |
Унарные операции |
|
++ |
увеличение на 1 |
– – |
уменьшение на 1 (пробелы между символами не допускаются) |
sizeof |
размер |
~ |
поразрядное отрицание |
! |
логическое отрицание |
– |
арифметическое отрицание (унарный минус) |
+ |
унарный плюс |
& |
взятие адреса |
* |
разадресация |
new |
выделение памяти |
delete |
освобождение памяти |
(type) |
преобразование типа |
Бинарные операции |
|
* |
умножение |
/ |
деление |
% |
остаток от деления |
+ |
сложение |
– |
вычитание |
<< |
сдвиг влево |
>> |
сдвиг вправо |
< |
меньше |
<= |
меньше или равно |
> |
больше |
>= |
больше или равно |
== |
равно |
!= |
не равно |
& |
поразрядная конъюнкция (И) |
^ |
поразрядное исключающее ИЛИ |
| |
поразрядная дизъюнкция (ИЛИ) |
&& |
логическое И |
|| |
логическое ИЛИ |
? : |
условная операция |
= |
присваивание |
*= |
умножение с присваиванием |
/= |
деление с присваиванием |
%= |
остаток отделения с присваиванием |
+= |
сложение с присваиванием |
–= |
вычитание с присваиванием |
<<= |
сдвиг влево с присваиванием |
>>= |
сдвиг вправо с присваиванием |
&= |
поразрядное И с присваиванием |
|= |
поразрядное ИЛИ с присваиванием |
^= |
поразрядное исключающее ИЛИ с присваиванием |
, |
последовательное вычисление |
Операции увеличения и уменьшения на 1 (++ и --). Эти операции, называемые также инкрементом и декрементом, имеют две формы записи — префиксную, когда операция записывается перед операндом, и постфиксную. В префиксной форме сначала изменяется операнд, а затем его значение становится результирующим значением выражения, а в постфиксной форме значением выражения является исходное значение операнда, после чего он изменяется.
Операндом операции инкремента в общем случае является так называемое L-значение (L-value). Так обозначается любое выражение, адресующее некоторый участок памяти, в который можно занести значение. Переменная является частным случаем L-значения.
Операции отрицания (–, ! и ~). Арифметическое отрицание (унарный минус –) изменяет знак операнда целого или вещественного типа на противоположный.
Логическое отрицание (!) дает в результате значение 0, если операнд есть истина (не нуль), и значение 1, если операнд равен нулю. Операнд должен быть целого или вещественного типа или типа указатель.
Поразрядное отрицание (~), часто называемое побитовым, инвертирует каждый разряд в двоичном представлении целочисленного операнда.
Деление (/) и остаток от деления (%). Операция деления применима к операндам арифметического типа. Если оба операнда целочисленные, результат операции округляется до целого числа, в противном случае тип результата определяется правилами преобразования.
Операция остатка от деления применяется только к целочисленным операндам. Знак результата зависит от реализации.
Операции отношения ( <, <=, >, >=, = =, != ) сравнивают первый операнд со вторым. Операнды могут быть арифметического типа или указателями. Результатом операции является значение true или false. Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции сравнения.
Поразрядные операции (&, |, ^) применяются только к целочисленным операндам и работают с их двоичными представлениями. При выполнении операций операнды сопоставляются побитово (первый бит первого операнда с первым битом второго, второй бит первого операнда со вторым битом второго, и т.д.).
Логические операции (&& и ||). Операнды логических операций И (&&) и ИЛИ (||) могут иметь арифметический тип или быть указателями, при этом операнды в каждой операции могут быть различных типов.
Преобразования типов не производятся, каждый операнд оценивается с точки зрения его эквивалентности нулю (операнд, равный нулю, рассматривается как false, не равный нулю — как true). Результатом логической операции является true или false.
Логические операции выполняются слева направо.
Операции присваивания (=, +=, -=, *= и т.д.). Операции присваивания могут использоваться в программе как законченные операторы. К операциям они относятся потому, что могут использоваться в выражениях и формируют результат своего выполнения.
Формат операции простого присваивания (=):
операнд_1 = операнд_2
Первый операнд должен быть L-значением, второй — выражением. Сначала вычисляется выражение, стоящее в правой части операции, а потом его результат записывается в область памяти, указанную в левой части.
В сложных операциях присваивания ( +=, *=, /= и т.п.) при вычислении выражения, стоящего в правой части, используется и L-значение из левой части, например, при сложении с присваиванием ко второму операнду прибавляется первый, и результат записывается в первый операнд.
Условная операция (?:). Эта операция тернарная, то есть имеет три операнда. Ее формат:
операнд_1 ? операнд_2 : операнд_3
Первый операнд может иметь арифметический тип или быть указателем. Он оценивается с точки зрения его эквивалентности нулю.
Если результат вычисления операнда 1 равен true, то результатом условной операции будет значение второго операнда, иначе — третьего операнда.