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