Унарные (одноместные) операторы
Для изображения одноместных префиксных и постфиксных операторов используются следующие символы:
& - оператор получения адреса операнда (ранг 2);
* - оператор обращения по адресу, т.е. раскрытия ссылки, иначе оператор разыменования (доступа по адресу к значению того объекта, на который указывает операнд)- Операндом должен быть указатель (ранг 2);
- унарный минус, изменяет знак арифметического операнда (ранг 2);
+ - унарный плюс, введен для симметрии с унарным минусом (ранг 2);
~ - поразрядное инвертирование внутреннего двоичного кода целочисленного аргумента - побитовое отрицание (ранг 2);
!-логическое отрицание (НЕ) значения операнда (ранг 2). Применяется к скалярным операндам- Целочисленный результат 0 (если операнд ненулевой, т.е. истинный) или 1 (если операнд нулевой, т.е, ложный).- Напомним, что в качестве логических значении в языке используют целые числа: 0 - ложь и не нуль, т.е. (!0) - истина. Отрицанием любого ненулевого числа будет 0, а отрицанием нуля будет 1. Таким образом: !1 равно 0; !2 равно 0; !(-5) равно 0; !0 равно 1;
++ - увеличение на единицу (инкремент или авто-увеличение - ранг 2); имеет две формы:
префиксный оператор - увеличение значения операнда на 1 до его использования, Ассоциативность справа в соответствии со стандартом;
постфиксный оператор - увеличение значения операнда на 1 после его использования. Ассоциативность слева в соответствии со стандартом,
Операнд для оператора ++ (и для оператора --) не может быть константой либо произвольным выражением. Записи ++5 или 84++ будут неверными, ++(j+k) также неверная запись. Операндами унарных операторов ++ и -- должны быть всегда модифицируемые именующие выражения (L-value,left value, l-значение, лево-допустимое выражение). Термины "лево-допустимое выражение" и "l-значение" происходят от объяснения действия операторы присваивания E = D, в которой операнд E слева от знака операторы присваивания может быть только модифицируемым l-значением. Примером модифицируемого l-значения служит имя переменной, которой выделена память.
Таким образом, l-значение - ссылка на область памяти, значение которой доступно изменениям;
-- - уменьшение на единицу (декремент или авто-уменьшение - ранг 2) - унарныйоператор, операндом которой должно быть лево-допустимое выражение, т.е.-не константа и не выражение:
префиксный оператор - уменьшение на 1 значения операнда до его использования;
постфиксный оператор - уменьшение на 1 значения операнда после его использования;
sizeof - оператор {ранг 2) вычисления размера (в байтах) для объекта того типа, который имеет операнд. Разрешены два формата операторы:
sizeof выражение;
sizeof ( тип).
sizeof не вычисляет значения выражения, а только определяет его тип, для которого затем вычисляется размер внутреннего представления.