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