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

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


Вычитание (-)

Операция вычитает второй операнд из первого. Операнды могут быть целого или плавающего типов. Типы первого и второго операндов могут отличаться. Допускается вычитание целого из указателя и вычитание двух указателей.

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

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

Адресная арифметика

Аддитивные операции, применяемые к указателю и целому, имеют осмысленный результат, когда указатель адресует массив памяти, а целая величина представляет смещение адреса в пределах этого массива. Преобразование целой величины к адресному смещению предполагает, что в пределах смещения плотно расположены элементы одинакового размера. Это предположение справедливо для элементов массива. Массив определяется как набор величин одного и того же типа; его элементы расположены в смежных ячейках памяти.

Способ запоминания для любых типов, исключая элементы массива, не гарантирует плотного заполнения памяти.

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

Аналогично, преобразования при вычитании двух указателей предполагают, что указатели ссылаются на величины одного и того же типа и что нет неиспользованной памяти между



элементами, расположенными в промежутке между адресами, заданными операндами.

Аддитивные операции между адресной и целой величинами на машинах с сегментной архитектурой (такие как 8086/8088) может быть неправильной в некоторых случаях.

Операции сдвига

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

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

Операции отношений

Бинарные операции отношений сравнивают первый операнд со вторым и вырабатывают значение 1 (true) и 0 (false). Типом результата является int. Имеются следующие операции отношений.

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

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



первого элемента массива меньше чем адрес следующего элемента.

Адресная величина может быть сравнена на равенство или неравенство с константой 0. Указатель, имеющий значение 0, не указывает на область памяти. Он называется нулевым указателем. Значение указателя равно нулю, если оно таким явно задано путем присваивания или инициализации.

Побитовые операции

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

Побитовое И(&)

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

Побитовое включающее ИЛИ (!)

Побитовое включающее ИЛИ сравнивает каждый бит своего первого операнда с соответствующим битом второго операнда. Если любой из сравниваемых битов равен 1, то соответствующий бит результата устанавливается в 1. В противном случае оба бита равны 0 и соответствующий бит результата устанавливается в 0.

Побитовое исключающее ИЛИ ( )

Побитовое исключающее ИЛИ сравнивает каждый бит своего первого операнда с соответствующим битом второго операнда. Если один из сравниваемых битов равен 0, а второй бит равен 1, то соответствующий бит результата устанавливается в 1; в противном случае соответствующий бит результата устанавливается в 0.

Логические операции

Логические операции выполняют логическое И (&&) и логическое ИЛИ (!!). Операнды логических операций могут быть целого, плавающего или адресного типа. Типы первого и второго операндов могут быть различными. Операнды логических



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

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