
- •1. Порядок выполнения работы
- •2. Предмашинная подготовка задачи
- •2.1. Алфавит
- •2.2. Простейшие конструкции
- •2.2.1. Ключевые слова
- •2.2.2. Переменные
- •2.2.4. Вызов функций
- •2.3. Выражения
- •2.3.1. Арифметические операции
- •2.4. Операторы
- •2.5.1. Комментарии
- •2.5.2. Директивы препроцессора
- •2.5.3. Глобальные переменные
- •2.5.4. Тело программы.
2.3. Выражения
Выражение – это последовательность операндов, разделителей (круглых скобок) и знаков операций, задающая вычисление. Если выражение содержит арифметические операции, то оно называется арифметическим, если логические операции, то – логическим выражением.
В качестве операндов в С/С++ могут быть использованы константы, переменные и вызовы функций.
Язык С/С++ в значительной степени является языком выражений. Это следует из того факта, что некоторые операции, например присваивания, не реализуется с помощью специальных операторов, а трактуются как операции с двумя аргументами. Важной особенностью является возможность превращения произвольного выражения в оператор. Для этого достаточно закончить выражение точкой с запятой. Такой способ чаще всего используется в отношении операции присваивания, которая в записи, заканчивающейся точкой с запятой, образует оператор, известный из других языков программирования как оператор присваивания.
Структура оператора присваивания
ИП = А; ИП = L;
где ИП – идентификатор переменной;
= – символ операции присваивания
A(L) – арифметическое (логическое) выражение;
; – признак оператора.
Принципы вычисления значений выражений вытекают из семантики и приоритетов, содержащихся в них операций, а также из видов использованных аргументов (операндов). Если данный аргумент находится в границах более чем одной операции с одинаковыми приоритетами, то операции являются связанными. Большинство операций связывает аргументы слева направо. Исключение составляют только операции с одним аргументом и операции присваивания, а также трёхаргументная условная операция. Порядок применения операций к аргументам зависит от принятых в языке приоритетов и связей операций. Операции более высокого приоритета, выполняются в первую очередь. Если некоторый аргумент касается двух операций одинакового приоритета, то очерёдность выполнения операций определяется по связыванию. Для изменения порядка выполнения операций используют круглые скобки. Таким образом, выражение x = y = z означает x = (y = z), а выраженияе x + y + z означает (x + y) + z, согласно соответствующим правилам связывания.
Связывание и упорядочивание операций по очерёдности уменьшения приоритетов приведены в табл. 5.
Таблица 5
№ |
Оператор |
Описание |
Приоритет |
Связывание |
1 |
2 |
3 |
4 |
5 |
1 |
:: |
Разрешение видимости |
16 |
=> |
2 |
[ ] |
Индекс массива |
16 |
=> |
3 |
( ) |
Вызов функции |
16 |
=> |
4 |
. |
Выбор члена структуры или класса |
16 |
=> |
5 |
-> |
|||
6 |
++ |
Постфиксный инкремент |
15 |
<= |
7 |
-- |
Постфиксный декремент |
15 |
<= |
8 |
++ |
Префиксный инкремент |
14 |
<= |
9 |
-- |
Префиксный декремент |
14 |
<= |
10 11 |
sizeof sizeof() |
Размер |
14 |
<= |
12 |
(тип) |
Преобразование типа |
14 |
|
13 |
~ |
Инверсия |
14 |
<= |
14 |
! |
Логическое НЕ |
14 |
<= |
15 |
- |
Унарный минус |
14 |
<= |
16 |
+ |
Унарный плюс |
14 |
<= |
17 |
& |
Получение адреса |
14 |
<= |
18 |
* |
Разыменование |
14 |
<= |
19 20 |
new new[] |
Создание динамического объекта |
14 |
<= |
21 22 |
delete delete[] |
Удаление динамического объекта |
14 |
<= |
23 |
casting |
Приведение типа |
14 |
|
24 |
* |
Умножение |
13 |
=> |
25 |
/ |
Деление |
13 |
=> |
26 |
% |
Остаток от деления |
13 |
=> |
27 |
+ |
Сложение |
12 |
=> |
28 |
- |
Вычитание |
12 |
=> |
29 |
>> |
Сдвиг вправо |
11 |
=> |
30 |
<< |
Сдвиг влево |
11 |
=> |
31 |
< |
Меньше |
10 |
=> |
32 |
<= |
Меньше или равно |
|
=> |
33 |
> |
Больше |
10 |
=> |
34 |
>= |
Больше или равно |
10 |
=> |
35 |
== |
Равно |
9 |
=> |
36 |
!= |
Не равно |
9 |
=> |
37 |
& |
Побитовое И |
8 |
=> |
38 |
^ |
Побитовое исключающее ИЛИ |
7 |
=> |
39 |
| |
Побитовое ИЛИ |
6 |
=> |
40 |
&& |
Логическое И |
5 |
=> |
41 |
|| |
Логическое ИЛИ |
4 |
=> |
42 |
?: |
Условие |
3 |
<= |
43 |
= |
Присваивание |
2 |
<= |
44 |
*= |
Умножение с присваиванием |
2 |
<= |
45 |
/= |
Деление с присваиванием |
2 |
<= |
46 |
%= |
Модуль с присваиванием |
2 |
<= |
47 |
+= |
Сложение с присваиванием |
2 |
<= |
48 |
-= |
Вычитание с присваиванием |
2 |
<= |
49 |
<<= |
Сдвиг влево с присваиванием |
2 |
<= |
50 |
>>= |
Сдвиг вправо с присваиванием |
2 |
<= |
51 |
&= |
Побитовое И с присваиванием |
2 |
<= |
52 |
^= |
Исключающее ИЛИ с присваиванием |
2 |
<=
|
53 |
|= |
Побитовое ИЛИ с присваиванием |
2 |
<= |
54 |
throw |
Генерация исключения |
2 |
<= |
55 |
, |
Запятая |
1 |
=> |
Операция присваивания может быть простой и составной.
Структуру использования простой операции мы рассмотрели выше.
Составная операция присваивания имеет вид
ИП ор= А;
где ИП – идентификатор переменной (целой или вещественной );
ор – символ операции (см. табл. 5);
А – арифметическое выражение;
; – признак оператора.
Составное присваивание выполняется как присваивание вида
ИП = ИП ор А;
Например, a*=b; эквивалентно a=a*b; или a-=b; эквивалентно a=a-b;