Урок 4.4. Поразрядные логические операции

4.4. Поразрядные логические операции

Поразрядные логические операции используются для работы с отдельными битами или группами бит данных. Поразрядные операции запрещено применять к данным float u double. В таблице 5.4 представлены поразрядные логические операции Си.

Таблица 5.4 Поразрядные логические операции

Название поразрядной логической операции Знак операции в Си
Поразрядное И &
Поразрядное ИЛИ  |
Поразрядное исключающее ИЛИ ^
Сдвиг влево <<
Сдвиг вправо >>
Обращение(унарная операция) ~

Поразрядная операция И (&) реализуется коньюнкцией над каждой парой битов данных. Например, если в программе есть описание переменных: int n,d;

и переменная n имеет значение 5, а переменная d имеет значение 6,то выражение n&d дает значение 4, ибо внутреннее представление значения переменной n - это 0000000000000101, а переменной d - это 0000000000000110. Результат применения к ним поразрядной операции И даст:

n                0000000000000101
d                0000000000000110
___           __________________
4                0000000000000100

Поразрядная операция И часто используется для выделения некоторой группы разрядов. Например, выражение: c=n&0177 гарантирует установку в нуль всех разрядов переменной с, кроме младших семи. Отметим, что здесь мы использовали операцию присваивания, которая будет рассматриваться далее.

Поразрядная операция ИЛИ (|)реализуется дизьюнкцией над каждой парой бит данных и часто используется для "включения" разрядов, например, выражения :

х=х|mask устанавливает в единицу те биты х, которым соответствуют единичные биты в mask.

Не следует путать поразрядные логические операции &  и | с логическими операциями && и ||. Например, выражение 1&2 имеет значение 0, но выражение 1&&2 имеет значение 1. Если не ясно почему это так, то следует дополнительно разобраться в этих операциях.

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

Таблица 4.5 Исключающее ИЛИ

Бит первого операнда Бит второго операнда Бит результата

0

0

0

0

1

1

1

0

1

1

1

0

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

При сдвиге влево освобождающиеся разряды заполняются нулями. Например, х<<2 сдвигает х влево на 2 разряда, заполняя оставшиеся нулями, что эквивалентно умножению на 4. В общем случае сдвинуть х на n разрядов влево это эквивалентно умножению значения х на 2 в степени n.

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

Унарная операция обращение (~) преобразует каждый единичный разряд в нулевой и наоборот. Например, выражение x=х&~077 установит в нуль шесть младших разрядов х.

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов