Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 15 16 17 [ 18 ] 19 20 21 ... 210


плавающей величиной. При выполнении операции осуществляются обычные арифметические преобразования.

Двоичное дополнение (~)

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

Логическое не (!)

Операция логического не (!) вырабатывает значение 0, если операнд есть true и значение 1, если операнд есть false. Результат имеет тип int. Операнд должен быть целого, плавающего или адресного типа.

Операция адресации и разадресации

Разадресация (*)

Разадресуемая величина доступна операции разадресации через указатель. Операнд должен быть указателем величины. Результатом операции является величина, на которую указывает операнд. Типом результата является тип, адресуемый указателем. Если значение указателя равно нулю, то результат непредсказуем.

Адресация(&)

Операция адресации (&) вырабатывает адрес своего операнда. Операндом может быть любая величина, которая допустима в качестве любого операнда операции присваивания.

Результат операции адресации является указателем на операнд. Тип, адресуемый указателем, является типом операнда.

Операция адресации не может применяться к битовым полям памяти структур, она не может быть применена также к идентификаторам класса памяти register.

Операция sizeof

Операция sizeof определяет размер памяти, который соответствует идентификатору или типу. Выражение sizeof имеет форму:

sizeof(<name>)

где <name> - или идентификатор или имя типа. Имя типа не может быть void. Значением выражения sizeof является размер



памяти в байтах, соответствующий поименованному идентификатору или типу.

Когда операция sizeof применяется к идентификатору массива, то результатом является размер всего массива в байтах, а не размер указателя, соответствующего идентификатору массива.

Когда операция sizeof применяется к тегу типа структуры или совмещения или к идентификатору, имеющему тип структуры или совмещения, то результатом является фактический размер в байтах структуры или совмещения, который может включать участки пространства, используемые для выравнивания элементов структуры или совмещения на границы физической памяти. Таким образом, этот результат может не соответствовать размеру, вычисленному путем сложения размеров элементов структуры.

buffer = calloc(100, sizeof(int));

Используя sizeof-операцию, можно избежать машинной зависимости, специфицируя в программе машинно-зависимые размеры данных. В примере используется операция sizeof, чтобы передать размер int, зависящий от машины, как аргумент функции, поименованной calloc. Значение, возвращаемое функцией, запоминается в буфер.

Мультипликативные операции

Мультипликативные операции выполняют операции умножения *, деления / и получения остатка от деления %. Операндами операции % должны быть целые числа. Операции умножения * и деления / выполняются над целыми и плавающими операндами. Типы первого и второго операндов могут отличаться.

Мультипликативные операции выполняют обычные арифметические преобразования операндов. Типом результата является тип операндов после преобразования.

Преобразования, выполненные посредством мультипликативных операций, не поддерживают ситуаций левого и правого переполнения. Информация теряется, если результат мультипликативной операции не может быть представлен в типе операндов после преобразования.



Умножение (*)

Операция умножения указывает на то, что ее оба операнда должны быть умножены.

Деление (/)

Операция деления указывает на то, что ее первый операнд делится на второй. Если две целые величины не делятся нацело, то результат усекается. Деление на 0 дает непредсказуемые результаты.

Остаток от деления (%)

Результатом операции является остаток от деления первого операнда на второй.

Аддитивные операции

Аддитивные операции выполняют сложение (+) и вычитание (-). Операндами могут быть целые и плавающие величины. В некоторых случаях аддитивные операции могут также выполняться на адресных величинах. На целых и плавающих операндах выполняются обычные арифметические преобразования. Типом результата является тип операндов после преобразования. Преобразования, выполняемые аддитивными операциями, не поддерживают левого и правого переполнения. Информация теряется, если результат аддитивной операции не может быть представлен типом операндов после преобразования.

Сложение (+)

Операция сложения специфицирует сложение двух операндов. Операнды могут быть целого или плавающего типов. Типы первого и второго операндов могут отличаться. Один операнд может быть указателем, а другой целой величиной. Когда целая величина складывается с указателем, то целая величина i преобразуется путем умножения ее на размер памяти, занимаемый величиной, адресуемой указателем. После преобразования целая величина представляет i позиций памяти, где каждая позиция имеет длину, специфицированную адресным типом. Когда преобразованная целая величина складывается с величиной указателя, то результатом является указатель, адресующий память, расположенную на i позиций дальше от исходного адреса. Новый указатель адресует тот же самый тип данных, что и исходный указатель.



1 ... 15 16 17 [ 18 ] 19 20 21 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика