Операционная система UNIX. Руководство программиста

     

Унарные операции


Выражения с унарными операциями группируются справа налево.

унарное_выражение: * выражение & л_значение - выражение ! выражение ~ выражение ++ л_значение -- л_значение л_значение ++

л_значение --

( имя_типа ) выражение sizeof выражение sizeof ( имя_типа )

Унарная операция * вызывает "переход к значению"; операнд должен быть указателем, результатом является л_значение, обозначающее объект, на который указывает операнд. Если тип операнда - "указатель на ...", то тип результата - "...".

Результатом унарной операции & является указатель на объект, который обозначен л_значением. Если тип л_значения - "...", то тип результата - "указатель на ...".

Результат унарной операции - равен значению операнда, взятому с противоположным знаком. Выполняются обычные арифметические преобразования. Число, противоположное беззнаковому, вычисляется вычитанием операнда из (2n), где n - число бит в соответствующем знаковом типе.

Унарная операция + отсутствует.

Результат операции логического отрицания ! равен единице, если значение операнда равно нулю, и нулю, если значение операнда ненулевое. Тип результата - int. Операция применима к любому арифметическому типу и к указателям.

Операция ~ дает побитное отрицание своего операнда. Выполняются обычные арифметические преобразования. Тип операнда должен быть целочисленным.

При выполнении префиксной операции ++ объект, который обозначается операндом-л_значением, увеличивается на единицу. Результат равен новому значению операнда, однако он не является л_значением. Выражение ++x эквивалентно x += 1. (См. информацию о преобразованиях в пунктах Аддитивные операции и Операции присваивания).

Операнд-л_значение префиксной операции -- уменьшается на единицу по аналогии с префиксной операцией ++.

Если к л_значению применяется постфиксная операция ++, результатом является объект, обозначенный данным л_значением. После того как выдан результат, объект увеличивается в точности аналогично префиксной операции ++. Тип результата совпадает с типом л_значения.


Если к л_значению применяется постфиксная операция --, результатом является объект, обозначенный данным л_значением. После того, как выдан результат, объект уменьшается аналогично префиксной операции --. Тип результата совпадает с типом л_значения.

Выражение, которому предшествует заключенное в скобки имя типа, преобразуется к названному типу. Такая конструкция называется явным преобразованием. Имена типов обсуждаются в пункте Имена типов раздела ОПИСАНИЯ.

Операция sizeof выдает размер своего операнда в байтах. (Понятие байта в языке фигурирует только как единица измерения sizeof, однако во всех существующих реализациях байт - это фрагмент памяти, необходимый для хранения символа.) Если операция применяется к массиву, результат равен общему числу байт в массиве. Размер вычисляется по описаниям объектов. Семантически данное выражение является константой типа unsigned и может использоваться повсюду, где требуется константа. В основном описанная конструкция используется при взаимодействии с процедурами, подобными процедурам динамического выделения памяти и ввода/выдода.

Операция sizeof может также применяться к заключенному в скобки имени типа. В этом случае она дает размер в байтах объектов указанного типа.

Конструкция sizeof(тип) считается неделимой, поэтому выражение sizeof(тип)-2 - это то же самое, что и (sizeof(тип))-2.




Содержание раздела