Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
YAZbIki.doc
Скачиваний:
8
Добавлен:
16.03.2015
Размер:
758.78 Кб
Скачать

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

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

унарное_выражение:

* выражение

& л_значение

- выражение

! выражение

~ выражение

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

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

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

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

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

sizeof выражение

sizeof ( имя_типа )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]