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