Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЯП - ПОИТ (Бахтизин) часть 1 редакт.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1.76 Mб
Скачать

2.2.2. Побитовые логические операции

В противоположность большинству языков, Си поддерживает все существующие побитовые операции. Поскольку Си создавался, чтобы заменить ассемблер, то была необходимость поддержки всех (или по крайней мере большинства) операций, которые может выполнить ассемблер. Побитовые операции – это сброс, установка или сдвиг битов в байте или слове, которые соответствуют стандартным типам языка Си char и int. Побитовые операции не могут использоваться с float, double, long double, void и агрегированными типами. Таблица 2.2 содержит имеющиеся побитовые операции.

Побитовые операции И, ИЛИ, НЕ используют ту же таблицу истинности, что и их логические эквиваленты, за тем исключением, что они работают побитно.

Таблица 2.2. Побитовые операции

Операция

Действие

&

|

^

~

>>

<<

И

ИЛИ

Исключающее ИЛИ

Побитовая инверсия

Сдвиг вправо

Сдвиг влево

Побитовое логическое И имеет следующую таблицу истинности:

P

Q

P&Q

0

0

0

0

1

0

1

0

0

1

1

1

Побитовое логическое ИЛИ имеет следующую таблицу истинности:

P

Q

P|Q

0

0

0

0

1

1

1

0

1

1

1

1

Исключающее ИЛИ имеет следующую таблицу истинности:

P

Q

P^Q

0

0

0

0

1

1

1

0

1

1

1

0

Побитовая инверсия имеет следующую таблицу истинности:

P

~P

0

1

1

0

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

Побитовое И чаще всего используется для выключения битов. То есть любой бит, установленный в 0, вызывает установку соответствующего бита в другом операнде также в 0. Например, 7&2=2:

00000111

00000010

&─────

00000010

число 7 в двоичном представлении

число 2 в двоичном представлении

выполнение побитового И

результатом является число 2

Побитовое ИЛИ, в противоположность И, может использоваться для установки битов. Например, в результате операции 5 | 2 получаем:

00000101

00000010

| ─────

00000111

число 5 в двоичном представлении

число 2 в двоичном представлении

побитовое ИЛИ

результат равен 7

Исключающее ИЛИ или XOR устанавливает бит, если соответствующие биты в операндах отличаются. Например, в результате операции 7 ^ 2 получаем:

00000111

00000010

^ ─────

00000010

7 в двоичном представлении

2 в двоичном предтавлении

побитовое исключающее ИЛИ

результат равен 5

Операция побитовой инверсии ~ инвертирует состояние каждого бита операнда, то есть 1 устанавливается в 0, а 0 – в 1.

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

Исходный байт

После первого дополнения

После второго дополнения

00101100

11010011 (зашифрованный результат)

00101100 (получен исходный байт)