Почему сдвиг меняет величину числа
В двоичной записи каждый разряд означает степень двойки: справа налево идут 1, 2, 4, 8 и так далее. Поэтому сдвиг всех битов на одну позицию влево обычно удваивает число: `1011` — это 11, а `10110` — 22. Сдвиг вправо, наоборот, делит его пополам, отбрасывая остаток: `1011` превращается в `101`, то есть 5.
Это не просто удобная запись той же арифметики. Процессору часто достаточно переместить биты по заданному правилу, вместо того чтобы выполнять более общую операцию умножения или деления. Важны и крайние разряды: при сдвиге влево освободившиеся места обычно заполняют нулями, а биты, вытесненные за пределы разрядной сетки, могут потеряться.
Где это полезно
Сдвиги подходят, когда программе нужно быстро умножить или разделить целое число на степень двойки. Они также помогают извлекать отдельные части числа и проверять флаги — биты, которыми программа хранит небольшие признаки, например состояние устройства или набор разрешений. Для этого бит сначала сдвигают в нужную позицию, а затем оставляют только интересующий участок.
Однако сдвиг вправо не всегда означает обычное деление: для отрицательных чисел поведение зависит от типа данных и правил языка программирования. Кроме того, современные компиляторы нередко сами заменяют простые операции сдвигами, а быстродействие зависит от процессора и контекста. Главное преимущество сдвига — не магическая скорость, а точное управление отдельными битами и простая арифметика там, где числа устроены подходящим образом.






