Выражения и операции
Выражения состоят из операндов, знаков операций и скобок. Результатом выражения является значение определенного типа. Знаки операций определяют действия, которые должны быть выполнены над операндами. Каждый операнд в выражении может быть выражением (или его частным случаем – константой или переменной).
Операции в выражении выполняются в соответствии с их приоритетом. Для изменения порядка выполнения используют круглые скобки.
Если в выражении подряд записаны несколько операций одного приоритета, то: унарные операции, условная операция и операции присваивания выполняются справа налево, все остальные операции – слева направо.
Основные операции языка C/C++
Операция |
Описание |
Унарные операции |
|
& |
Получение адреса операнда |
* |
Операция разыменования (обращение по адресу ссылки) |
– |
Арифметическое отрицание (унарный минус) |
+ |
Унарный плюс |
++ |
Увеличение на 1 (инкремент) |
– – |
Уменьшение на 1 (декремент) |
! |
Логическое отрицание (НЕ) |
sizeof |
Определение размера |
(тип) |
Приведение типа |
Бинарные операции |
|
мультипликативные операции |
|
* |
Умножение |
/ |
Деление |
% |
Остаток от деления |
аддитивные операции |
|
+ |
Сложение |
– |
Вычитание |
Операции сдвигов |
|
<< |
Сдвиг влево |
>> |
Сдвиг вправо |
Поразрядные операции |
|
& |
Поразрядное И |
^ |
Поразрядное исключающее ИЛИ |
| |
Поразрядное ИЛИ |
Логические операции |
|
&& |
Логическое И |
|| |
Логическое ИЛИ |
Операции отношений |
|
< |
Меньше |
<= |
Меньше или равно |
> |
Больше |
>= |
Больше или равно |
= = |
Равно |
!= |
Не равно |
? : |
Условная операция (тернарная) |
Операции присваивания |
|
= |
Обычное присваивание |
*= |
Умножение с присваиванием |
/= |
Деление с присваиванием |
%= |
Остаток от деления с присваиванием |
+= |
Сложение с присваиванием |
– = |
Вычитание с присваиванием |
<<= |
Сдвиг влево с присваиванием |
>>= |
Сдвиг вправо с присваиванием |
&= |
Поразрядное И с присваиванием |
|= |
Поразрядное ИЛИ с присваиванием |
^= |
Поразрядное исключающее ИЛИ с присваиванием |
, |
Последовательное вычисление (несколько выражений, разделенных запятыми вычисляются последовательно слева направо, результатом будет значение самого правого выражения) |
Операции выбора компонентов структурированного объекта |
|
. (точка) |
Прямой выбор компонента структуры |
–> |
Косвенный выбор компонента структурированного объекта, адресуемого указателем. |
Примечания
1 Операции сдвига, увеличения (уменьшения) на 1, поразрядные операции, остаток от деления применяются только для целочисленных операндов.
2 В качестве операнда для операций ++ и – – можно использовать только L-значения (леводопустимые выражения).
Операции ++ и – – могут использоваться в префиксной форме (изменение операнда до его использования) или постфиксной форме (изменение операнда после его использования).
Примеры: ++w – префиксная форма; w++ - постфиксная форма.
То есть, если заданы целые числа x=16, y=9,
то при вычислении выражения z=x++-y вначале вычисляется x-y, затем x++, в результате получим: z=7, x=17,
а при вычислении выражения z=++x-y вначале вычисляется ++x, а затем x-y, в результате получим: z=8, x=17
4 Для всех составных операций присваивания форма присваивания E1 оп=E2 эквивалентна форме E1=E1 оп E2, где оп – обозначение операции.
Приоритет операций в C/C++
Ранг |
Операции |
Тип операции |
Порядок выполнения |
1 |
( ) [ ] –> . |
Выражение |
слева направо |
2 |
+ – ! * ++ – – sizeof приведение типа |
Унарные |
справа налево |
3 |
* / % |
Мультипликативные бинарные |
слева направо |
4 |
+ – |
Аддитивные бинарные |
|
5 |
<< >> |
Поразрядный сдвиг |
|
6 |
< <= >= > |
Отношения |
|
7 |
= = != |
Отношения |
|
8 |
& |
Поразрядное И |
|
9 |
^ |
Поразрядное ИЛИ |
|
10 |
| |
Поразрядное исключающее ИЛИ |
|
11 |
&& |
Логическое И |
|
12 |
|| |
Логическое ИЛИ |
|
13 |
?: |
Условная операция |
слева направо |
14 |
= *= /= %= += – = &= ^= |= <<= >>= |
Присваивание |
слева направо |
15 |
, |
Последовательное вычисление |
слева направо |
Примечание – У операций с меньшим рангом приоритет выше.
