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