Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PYaVU_s.doc
Скачиваний:
44
Добавлен:
24.02.2016
Размер:
665.09 Кб
Скачать
      1. Операции сдвига

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

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

Пример :

unsigned short x,y,z;

x = 0x00aa;

y = 0x5500;

z = (x << 8) + (y >> 8);

В примере x сдвигается влево на 8 позиций, а y сдвигается вправо на 8 позиций. Результаты сдвигов складываются, давая величину 0xaa55, которая присваивается z.

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

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

Операция

Отношение

<

Первый операнд меньше, чем второй операнд

>

Первый операнд больше, чем второй операнд

<=

Первый операнд меньше или равен второму операнду

>=

Первый операнд больше или равен второму операнду

==

Первый операнд равен второму операнду

!=

Первый операнд не равен второму операнду

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

Первый или второй операнды операций равенства "= =" или не- равенства "! =" могут быть типа enum. Величина типа enum преобразуется точно так же , как и величины типа int. Операндами любой операции отношения могут быть два указателя одного и того же типа. Для операций равенства или неравенства результат сравнения показывает, равны ли оба адреса в указателях. Результат сравнения указателей для других операций (<,>,<=,>=) отражает относительное положение двух адресов памяти.

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

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

Примеры

int x = 0, y = 0;

x < y/* example 1 */

y > x/* example 2 */

x <= y /* example 3 */

x >= y /* example 4 */

x = = y /* example 5 */

x != y /* example 6 */

Если x и y равны, то выражения 3,4 и 5 имеют значение 1, а выражения 1,2 и 6 имеют значения 0.