Бинарные сдвиги (C++)


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

Все числа в памяти компьютера хранятся в двоичном виде, т.е. в виде последовательности 0 и 1. Для хранения чисел в памяти компьютера используется конечное число разрядов. Из-за этого числа в компьютере имеется ограниченный диапазон, а результаты вычислений могут быть неточными. Для хранения целого числа может быть использовано 8, 16, 32 или 64 бита памяти. Каждый дополнительный бит расширяет диапазон возможных значений в 2 раза. 
Операции с положительными и отрицательными числами выполняются в процессоре по одним и тем же алгоритмам.

С помощью поразрядных логических операций можно управлять отдельными битами регистров процессора и внешних устройств. 
 
Операция C++ Назначение
a & b Побитовое И для a и b
a | b Побитовое ИЛИ для a и b
a ^ b Исключающее ИЛИ для a и b
~a Инверсия битов для a
a << b Побитовый сдвиг влево для a на b
a >> b Побитовый сдвиг вправо для a на b



Операция И
С помощью операции «И» можно сбросить (установить в ноль) биты, для которых маска равна 0! 
 
Маска – константа, которая определяет область применения логической операции к битам многоразрядного числа.

D - данные, М - маска

 

Операция ИЛИ
С помощью операции «ИЛИ» можно записать единицу в биты, для которых маска равна 1!

 

Операция исключающее ИЛИ
С помощью операции «исключающее ИЛИ» можно инвертировать биты, для которых маска равна 1!


 

Сдвиг влево
Логический (побитовый) сдвиг влево на 1 разряд увеличивает целое положительное число вдвое.

 

Сдвиг вправо
Логический (побитовый) .сдвиг вправо на 1  делит целое положительное число нацело на 2.


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