Битовый сдвиг
Материал из Википедии — свободной энциклопедии
- Статья не полностью соответствует правилам Википедии или рекомендациям по оформлению статей. Желательно:
- проставить интервики
- найти и указать авторитетные источники, подтверждающие написанное
- викифицировать
Би́товый сдви́г — изменение позиций битов в слове на одну и ту же величину.
В основной своей массе компьтеры не могут напрямую адресовать биты, которые содержатся группами по 8, 16, 32 битов в словах. Для обеспечения работы с битами существует множество команд, к которым относятся и сдвиги: Все сдвиги похожи друг на друга поведением средних битов: они просто сдвигаются влево или вправо на определенную величину. И различаются поведением крайних битов: одного, который уходит из слова, и второго, который должен появиться в слове.
[править] Логический сдвиг
Сдвиг, при котором уходящий бит уходит, не влияя на оставшееся биты, а на место появившегося бита записывается бит 0.
Пример работы операции сдвига:
- Пусть у нас есть число 10101010b (в двоичной системе).
- Если сделать сдвиг влево на 1 бит, то получим число 01010100b
- Если сделать сдвиг вправо на 1 бит, то получим число 01010101b
[править] Арифметический сдвиг
При этом сдвиге слово рассматривается не просто как группа битов, а как целое число в дополнительном коде. При сдвиге влево ведет себя как логический сдвиг, при сдвиге вправо: уходящий бит уходит, не влияя на оставшееся биты, а на место появившегося бита устанавливается бит, соответствующий знаку.
Пример работы операции сдвига:
- Пусть у нас есть число 11111010b=-6 (в двоичной системе).
- Если сделать сдвиг влево на 1 бит, то получим число 11110100b=-12
- Если сделать сдвиг вправо на 1 бит, то получим число 11111101b=-3
Легко заметить, что при арифметическом сдвиге сдвиг влево соответствует умножению на 2, а сдвиг вправо делению на 2.
[править] Циклический сдвиг
При этом сдвиге уходящий бит появляется на месте появившегося.
Пример работы операции сдвига:
- Пусть у нас есть число 11111010b (в двоичной системе).
- Если сделать сдвиг влево на 1 бит, то получим число 11110101b
- Если сделать сдвиг вправо на 1 бит, то получим число 01111101b
Схемотехническая реализация операций сдвига очень проста. Именно поэтому эти операции рекомендуют использовать для операций умножения на числа степеней 2.