Толстой Л.Н. Война и мир 1995 6

Структуры и поразрядные операции

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

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

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

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

Таблица 1

Приоритет Название операции Символ операции
  НЕ (инверсия, отрицание) И (логическое умножение) ИЛИ исключающее (сложение по 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]
           
           
           
           

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

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

Сдвиговые поразрядные операции

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

Результатом выражания вида


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: