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

3.3. Поразрядные операции

К поразрядным операциям относятся: операция поразрядного "И" (&), операция поразрядного (включающего) "ИЛИ" (|), операция поразрядного "исключающего ИЛИ" (^), сдвиг влево (<<), сдвиг вправо (>>) и дополнение (~). Операнды поразрядных операций могут быть любого целого типа.

В операциях поразрядного И, поразрядного включающего ИЛИ и поразрядного исключающего ИЛИ два операнда сравниваются побитно.

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

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

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

Операция поразрядного дополнения (поразрядное НЕ) все биты, равные 0, устанавливает равными 1, а все биты, равные 1, устанавливает равными 0.

Примеры.

unsigned i=0x45FF; /* i=0100 0101 1111 1111 = 17919 */

unsigned j=0x00F; /* j = 0000 0000 1111 1111 =255 */

unsigned r;

r = i^j; /* r=0x4500 = 0100 0101 0000 0000 */

r = i|j; /* r=0x45FF = 0100 0101 1111 1111 */

r = i&j; /* r=0x00FF = 0000 0000 1111 1111 */

Операции сдвига осуществляют смещение операнда влево (<<) или вправо (>>) на число битов, задаваемое вторым операндом.

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

Отметим, что сдвиг влево соответствует умножению первого операнда на степень числа 2, равную второму операнду, а сдвиг вправо соответствует делению первого операнда на 2 в степени, равной второму операнду.

Примеры:

unsigned i=0x1234, j, k ; /* i = 0001 0010 0011 0100 */

k = i<<4 ; /* k = 0x2340 ( 0010 0011 0100 0000 ) */

j = i<<8 ; /* j = 0x3400 */

i = j>>8 ; /* i = 0x0034 */

Битовая маска — определённые данные, которые используются для выбора битов из двоичной строки или числа. Например, для получения значения пятого бита (считая слева) числа 10111011 нужно использовать маску 00001000 и применить операцию побитового «И» . В результате получится:

10111011 & 00001000 = 00001000

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