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