Выражение с унарными операциями группируется справо на-
лево.
Унарное-выражение:
* выражение
& L-значение
- выражение
! Выражение
\^ выражение
++ L-значение
-- L-значение
L-значение ++
L-значение --
(имя-типа) выражение
SIZEOF выражение
SIZEOF имя-типа
Унарная операция * означает косвенную адресацию: выраже-
ние должно быть указателем, а результатом является L-значе-
ние, ссылающееся на тот объект, на который указывает выраже-
ние. Если типом выражения является "указатель на...", то ти-
пом результата будет "...".
Результатом унарной операции & является указатель на
объект, к которому ссылается L-значение. Если L-значение
имеет тип "...", то типом результата будет "указатель на
...".
Результатом унарной операции - (минус) является ее опе-
ранд, взятый с противоположным знаком. Для величины типа
UNSIGNED результат получается вычитанием ее значения из 2**N
(два в степени N), где N-число битов в INT. Унарной операции
+ (плюс) не существует.
Результатом операции логического отрицания ! Является 1,
если значение ее операнда равно 0, и 0, если значение ее
операнда отлично от нуля. Результат имеет тип INT. Эта опе-
рация применима к любому арифметическому типу или указате-
лям.
Операция \^ дает обратный код, или дополнение до едини-
цы, своего операнда. Выполняются обычные арифметические пре-
образования. Операнд должен быть целочисленного типа.
Объект, на который ссылается операнд L-значения префикс-
ной операции ++, увеличивается. значением является новое
значение операнда, но это не L-значение. Выражение ++х экви-
валентно х+=1. Информацию о преобразованиях смотри в разборе
операции сложения (п. 15.4) и операции присваивания (п.
15.14).
Префиксная операция -- аналогична префиксной операции
++, но приводит к уменьшению своего операнда L-значения.
При применении постфиксной операции ++ к L-значению ре-
зультатом является значение объекта, на который ссылается
L-значение. После того, как результат принят к сведению,
объект увеличивается точно таким же образом, как и в случае
префиксной операции ++. Результат имеет тот же тип, что и
выражение L-значения.
При применении постфиксной операции -- к L-значению ре-
зультатом является значение объекта, на который ссылается
L-значение. После того, как результат принят к сведению,
объект уменьшается точно таким же образом, как и в случае
префиксной операции --. Результат имеет тот же тип, что и
выражение L-значения.
Заключенное в круглые скобки имя типа данных,стоящее пе-
ред выражением , вызывает преобразование значения этого вы-
ражения к указанному типу. Эта конструкция называется пере-
вод (CAST). Имена типов описываются в п. 16.7.
Операция SIZEOF выдает размер своего операнда в байтах.
(Понятие байт в языке не определено, разве только как значе-
ние операции SIZEOF. Однако во всех существующих реализациях
байтом является пространство, необходимое для хранения
объекта типа CHAR). При применении к массиву результатом яв-
ляется полное число байтов в массиве. Размер определяется из
описаний объектов в выражении. Это выражение семантически
является целой константой и может быть использовано в любом
месте, где требуется константа. Основное применение эта опе-
рация находит при связях с процедурами, подобным распредели-
телям памяти, и в системах ввода- вывода.
Операция SIZEOF может быть также применена и к заключен-
ному в круглые скобки имени типа. В этом случае она выдает
размер в байтах объекта указанного типа.
Конструкция SIZEOF (тип) рассматривается как целое, так
что выражение SIZEOF (тип) - 2 эквивалентно выражению
(SIZEOF (тип)9 - 2.