Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 3.2 (ч.1). Команды и данные. Абстракция да...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
624.15 Кб
Скачать

3.2.3.2 Битовые операции

Битовой операцией называется операция, выполняемая над разрядами операндов символьного и целого типов в двоичном представлении.

Битовая операция определяется правилом:

битовая операция ::= ~(инверсия битов) | >>(сдвиг битов вправо) | <<(сдвиг битов влево) |

«|»(сложение битов) | &(умножение битов) | ^(исключающее сложение битов);

Операция ~ (инверсия битов) – это одноместная операция, которая инвертирует биты данного: устанавливает бит в 1, если он был равен 0, и наоборот. Например, если char X = 32, то выполнение операции ~X дает следующий результат (рисунок 3.2.10): X = 1101 1111(2) = 223.

Рисунок 3.2.10

Операция >> (сдвиг битов вправо) - одноместная операция, которая сдвигает биты операнда вправо на указанное справа от символа >> количество позиций n. Такая операция эквивалентна делению на 2n. При этом правые биты данного, которые после сдвига будут находиться за границами его разрядности, теряются. Если левый операнд представляет собой целое без знака, то левые освободившиеся биты заполняются нулями. В противном случае они заполняются символом знака (битом, равным 1) .

Например, если char X = 32, то выполнение операции X>>4 дает следующий результат (рисунок 11): X = 0000 0010(2) = 2, что эквивалентно 32 / 24 = 32 / 16 = 2.

Рисунок 11

Операция << (сдвиг битов влево) - одноместная операция, которая сдвигает биты операнда влево на указанное справа от символа << количество позиций n. Такая операция эквивалентна умножению на 2n. При этом левые биты данного, которые после сдвига будут находиться за границами его разрядности, теряются. Правые освободившиеся биты заполняются нулями.

Например, если char X = 2, то выполнение операции X<<4 дает следующий результат: X = 00100000(2) = 32, что эквивалентно 2 · 24 = 2 · 16 = 32.

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

Операция | (сложение битов) для каждого бита результата дает 1, если в одинаковых позициях битов операндов хотя бы один из складываемых битов установлен в 1. Например:

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

Нетрудно проверить, что операция X&1 дает в результате 1 (или «истина») для четного X, и дает 0 (или «ложь») для нечетного X.

Операция ^ (исключающее сложение битов) выполняется так же, как операция сложение битов, за исключением ситуации, когда в одинаковых позициях битов операндов оба складываемых бита установлены в 1. В этом случае результатом операции ^ для этих битов будет 0. Пусть, например, X=3 и Key=2. Тогда Y= X ^ Key = 1, поскольку:

В этой операции второй операнд (Key) выступает в роли простейшего «ключа шифра». В этом нетрудно убедиться, если снова выполнить операцию ^ над «результатом шифровки» Y и тем же «ключом шифра» Key. Результатом вы­полнения этой операции будет дешифрованный исходный операнд X:

Битовые операции широко используются для формирования и проверки состояния флагов в т.н. «битовых масках». Например, записать значение 1 флага в n-ый бит «битовой маски» операнда char X можно выражением X | (1 << (8 - n)), а проверить состояние этого флага в «битовой маске» можно выражением X & (1 << (8 - n)).