Приглашаем посетить
Куприн (kuprin-lit.ru)

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

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

Битовые операторы по своему действию похожи на логические, за тем только исключением, что битовые операторы производят действия, как и следовало ожидать, над битами.

op1 & op2 - Оператор "И" сравнивает два бита и генерирует результат "истина", если оба бита равны 1, иначе - "ложь"

op1 | op2 - Оператор "ИЛИ" сравнивает два бита и генерирует результат "истина", если биты комплиментарные, иначе - "ложь".

op1 ^ op2 - Оператор "Исключающее ИЛИ" сравнивает два бита и генерирует результат "истина", если один из битов (или они оба) равен 1, иначе - "ложь".

~op1 - Оператор "Дополнение" используется для инверсии всех битов.

op1 >> op2 - Оператор "Сдвиг вправо" сдвигает все биты операнда вправо, теряя при этом правый крайний бит, - левый крайний бит становится равным 0. Каждый сдвиг битов операнда вправо равносилен его делению на 2.

op1 << op2 - Оператор "Сдвиг влево" сдвигает все биты операнда влево, теряя при этом левый крайний бит, - правый крайний бит становится равным 0. Каждый сдвиг битов операнда вправо равносилен его умножению на 2.

Замечание - битовые операции могут проводиться ТОЛЬКО над операндами целого типа.

Битовые операторы используются, чтобы изменять значения отдельных битов операнда. Один байт компьютерной памяти на самом деле состоит из 8-и битов, каждый из которых можно рассматривать, как флаг, - потому что каждый бит может быть равен 0 или 1, - "истина" или "ложь". Флаговые переменные обычно используются для индикации статуса чего-либо. Например, если у вас имеется файл только для чтения, вы можете пометить этот факт заданием переменной-флага $readOnly, которая может быть равна только 1 либо 0. И задавая значение этой переменной в 0 или 1, вы можете определять этот файл как доступный для записи или же только для чтения. Но если у вас несколько флагов, то выделять под них несколько переменных было бы слишком расточительно. Лучше использовать в качестве флагов отдельные биты одной переменной. Таким образом, в одной "обычной" переменной вы можете хранить как бы несколько маленьких, значением любой из которых может быть только ноль или единица. Это наглядно демонстрируется ниже.

Назад | Оглавление | Далее