Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка ПО на языке Си для микроконтроллера AT91SAM7S.pdf
Скачиваний:
120
Добавлен:
18.05.2014
Размер:
838.69 Кб
Скачать

8Операторы сравнения

Операторы сравнения (см. таблицу 6) используются с двумя аргументами

любых типов (как правило, одинаковых). Результат имеет булевый тип. Так же как и обычные логические операции они предназначены для формирования булевых признаков. Примеры использования см. в листингах 13 и 15.

Таблица 6. Операторы сравнения

Наименование

Оператор

 

 

Больше

>

 

 

Меньше

<

 

 

Больше или равно

>=

 

 

Меньше или равно

<=

 

 

Равно ли

==

 

 

Не равно ли

!=

 

 

30

9Сдвиги

Сдвиги – это битовые операторы, работающие с двумя операндами,

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

По направлению сдвига различают правый (оператор « >> ») и левый (« << ») сдвиг, по способу обработки знакового бита первого операнда – на арифметический и логический.

В Си логический сдвиг представляет собой операцию над операндом беззнакового типа (например, unsigned int, unsigned short). Биты с одного края, сдвигающиеся за пределы разрядной сетки, пропадают, а освобождающиеся позиции с другого края заполняются нулями.

Арифметический сдвиг в Си производится над операндом знакового типа (например, int или short). Причём, при правом сдвиге отрицательного числа освобождающиеся позиции слева заполняются единицами, таким образом, значение знакового бита сохраняется. Левый арифметический сдвиг идентичен левому логическому.

Примеры использования сдвиговых операторов приведены в листинге 16.

Листинг 16. Сдвиговые операторы

unsigned char value = 0b01000011;

//Логический сдвиг влево

//leftShiftedValue = 0b00011000

unsigned char leftShiftedValue = value << 3;

//Логический сдвиг вправо

//rightShiftedValue = 0b00100001

unsigned char rightShiftedValue = value >> 1;

// Арифметический сдвиг вправо

int a = -4; // 0b 1111 1111 1111 1111 1111 1111 1111 1100;

int b = a >> 1; // b= -2 = 0b 1111 1111 1111 1111 1111 1111 1111 1110;

31