Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ - методичка2.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
403.97 Кб
Скачать

Толстой л.Н. Война и мир 1995 6 Структуры и поразрядные операции

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

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

Эти операции предназначены для изменения отдельных разрядов данных целых типов. Они используются для обработки двоичных кодов данных целых типов int (signed - со знаком и unsigned - без знака), а также символьных типов char и unsigned char. Поразрядные операции делятся на логические и сдвиговые операции.

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

Таблица 1

Приоритет

Название операции

Символ операции

1

2

3

4

НЕ (инверсия, отрицание)

И (логическое умножение)

ИЛИ исключающее (сложение по mod 2)

ИЛИ (логическое сложение)

~

&

^

|

Операция НЕ является унарной, остальные – бинарными.

Результаты поразрядных логических операций над битами A[i] , B[i] операндов целых типов представлены в табл.2.

Таблица 2

Значения битов

Операции

A[i]

B[i]

~ A[i]

A[i] & B[i]

A[i] ^ B[i]

A[i] | B[i]

1

1

0

1

0

1

1

0

0

0

1

1

0

1

1

0

1

1

0

0

1

0

0

0

Каждая из поразрядных операций служит определенным целям. Рассмотрим применение этих операций на примерах с однобайтовыми словами. Пусть, например, описаны переменные:

unsigned char a, b, c;

Операция НЕ (~) изменяет значения всех битов слова на противоположные, например, пусть а=0.

Пример. Двоичный код: Десятичный код:

а= 00000000 0

~a=11111111 225

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

Пример. Пусть задан код а=10110000 и требуется обнулить старший разряд. Положим код b=01111111 (число 127), тогда

а = 10110000

b = 01111111

a&b = 10110000

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

Пример. Пусть а=00110000 и требуется установить 1 в старшем и младшем разрядах, тогда

a = 10110000

b = 10000001

a | b = 10110001

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

Пример. В переменной a требуется изменить значение старшего разряда на противоположное. Положим b=10000000 (код маски), тогда:

  1. a = 01110001 б) a = 11110001

b = 10000000 b = 10000000

a ^ b = 11110001 a ^ b = 01110001