
- •Лекция №2
- •5. Операции и Выражения
- •Lvalues и Rvalues выражения
- •Унарные, бинарные и тернарное выражения
- •Приоритеты операций и порядок вычислений
- •Арифметические преобразования при вычислении выражений
- •5.1. Мультипликативные и аддитивные операции
- •Мультипликативные операции
- •Аддитивные операции
- •5.2. Операции отношения
- •Операции сравнения
- •Операции равенства
- •5.3.Логические операции
- •Второй операнд логической операции и и или вычисляется только, если это необходимо для определения результата. Операция логическое и
- •Операция логическое или
- •Операция логическое не
- •5.4. Побитовые операции
- •Операции сдвига
- •Операция побитовое и
- •Операция побитовое исключающее или
- •Операция побитовое включающее или
- •Операция побитового отрицания не
- •Отличие логических операций от логических побитовых операций
- •5.5. Операция последовательного вычисления
- •5.6. Операции присваивания
- •Простое присваивание
- •Составное присваивание
- •Побочные эффекты
- •5.7. Адресные операции
- •Операция разадресации
- •Операция взятия адреса
- •5.8. Операция sizeof
- •5.9. Условная операция
- •5.10. Операции преобразования типов
- •5.11 Особые операции
Лекция №2
5. Операции и Выражения
Операнд - это константа, литерал, идентификатор, вызов функции, индексное выражение, выражение выбора элемента или более сложное выражение, сформированное комбинацией операндов, знаков операций и круглых скобок. Любой операнд, который имеет константное значение, называется константным выражением. Каждый операнд имеет тип.
Знаки операций определяют действия, которые должны быть выполнены над операндами.
Комбинация знаков операций и операндов, результатом которой является определенное значение, называется выражением. Каждый операнд в выражении может быть выражением. Значение выражения зависит от расположения знаков операций и круглых скобок в выражении, а также от приоритета выполнения операций.
Самостоятельная проработка:
Lvalues и Rvalues выражения
Lvalues –выражение (или именующее выражение) представляет собой локатор объекта, выражение, которое обозначает объект.
Модифицируемое именующее выражение – это идентифицирующее выражение, относящееся к объекту, к которому возможен доступ и допустимо его изменение в памяти. Так значения констант, описанные в модификаторе const, не являются модифицируемыми именующими выражениями. Исторически в слове Lvalues буква L означает «левый» (Left). Это означает, что Lvalue допускается в левой части оператора присваивания. Здесь в левой части оператора присваивания допустимы только модифицируемые именующие выражения. Например, если а и с – это не являющиеся константами целочисленные идентификаторы с правильно распределенными для них областями памяти, то оба они являются модифицируемыми именующими выражениями, и присваивания типа а=1; с=а+с; вполне допустимы.
Rvalues –выражения называют значением переменной (значением правой части выражения). Исторически в слове Rvalues буква R означает «правый» (Right).Так, например, выражение с+а не является именущим (присваивание типа с+а=с недопустимо), но является Rvalue –выражением.
Унарные, бинарные и тернарное выражения
Унарное выражение состоит из операнда и предшествующего ему знаку унарной операции и имеет следующий формат:
ЗнакУнарнойОперации Выражение .
Бинарное выражения состоит из двух операндов, разделенных знаком бинарной операции:
Выражение1 ЗнакБинарнойОперации Выражение2 .
Тернарное выражение состоит из трех операндов, разделенных знаками тернарной операции (?) и (:), и имеет формат:
Выражение1 ? операнд2 : операнд3 .
По количеству операндов, участвующих в операции, операции подразделяются на унарные, бинарные и тернарные.
Унарные операции выполняются справа налево.
Операции увеличения и уменьшения увеличивают или уменьшают значение операнда на единицу и могут быть записаны как справа так и слева от операнда. Если знак операции записан перед операндом (префиксная форма), то изменение операнда происходит до его использования в выражении. Если знак операции записан после операнда (постфиксная форма), то операнд вначале используется в выражении, а затем происходит его изменение.
Таблица 7 Унарные операции
Знак операции |
Операция |
Группа операций |
+ |
Унарный плюс |
Аддитивные |
- |
Отрицание |
|
++ |
Увеличение |
|
-- |
Уменьшение |
|
~ |
Поразрядное отрицание(дополнение) |
Поразрядные операции |
! |
Логическое отрицание |
Логические операции |
* |
Разадресация (косвенная адресация) |
Адресные операции |
& |
Вычисление адреса |
|
Sizeof |
Размер |
Size-операция |
В отличие от унарных, бинарные операции, список которых приведен в табл.8, выполняются слева направо.
Таблица 8 Бинарные операции
Знак операции |
Операция |
Группа операций |
* |
Умножение |
Мультипликативные |
/ |
Деление |
|
% |
Остаток от деления |
|
+ |
Сложение |
Аддитивные |
- |
Вычитание |
|
<< |
Сдвиг влево |
Операции сдвига |
>> |
Сдвиг вправо |
|
< |
Меньше |
Операции отношения |
<= |
Меньше или равно |
|
>= |
Больше или равно |
|
== |
Равно |
|
!= |
Не равно |
|
& |
Поразрядное И |
Поразрядные операции |
| |
Поразрядное ИЛИ |
|
^ |
Поразрядное исключающее ИЛИ |
|
&& |
Логическое И |
Логические операции |
|| |
Логическое ИЛИ |
|
, |
Последовательное вычисление |
Последовательного вычисления |
= |
Присваивание |
Операции присваивания |
*= |
Умножение с присваиванием |
|
/= |
Деление с присваиванием |
|
%= |
Остаток от деления с присваиванием |
|
-= |
Вычитание с присваиванием |
|
+= |
Сложение с присваиванием |
|
<<= |
Сдвиг влево с присваиванием |
|
>>= |
Сдвиг вправо присваиванием |
|
&= |
Поразрядное И с присваиванием |
|
|= |
Поразрядное ИЛИ с присваиванием |
|
^= |
Поразрядное исключающее ИЛИ с присваиванием |
При вычислении выражений тип каждого операнда может быть преобразован к другому типу. Преобразования типов могут быть неявными, при выполнении операций и вызовов функций, или явными, при выполнении операций приведения типов.