В прошлой статье мы рассмотрели какие операции можно выполнять с битами, сегодня мы будем рассказывать как работать с определенным битом. Дело в том что не все электронные системы поддерживают прямое обращение к конкретному биту из байта, для этого применяют так называемые операции битового сдвига. Операции битового сдвигают биты в указанном направлении на нужное число элементов.
Типы битового сдвига:
1. логический сдвиг - сдвиг при котором бит сдвигается на нужную велечину, а на месте его записывается 0. В основном мы будем использовать данный сдвиг.
2. Арифметический сдвиг - по сути очень похож на логический но, при сдвиге в право освободившееся позиции заполняются значениями с крайнего левого
3. циклический - когда биты с уходящей стороны заполняют освободившееся место с другой
Битовый сдвиг на языке программирования C
В языке С битовый сдвиг осуществляется при помощи символов:
- "<<" - сдвиг в лево
- ">>" - сдвиг в право
С помощью данных символов указывается на сколько значений сдвинуть бит. При этом стоит помнить при сдвиге вправо в С выполняется не логический, арифметический сдвиг.
Запись битового сдвига будет выглядеть следующим образом:
Приведу так же табличку с примерами битового сдвига десятичного числа 1 (0b00000001):
Запись сдвига | десятичный результат | Битовое представление |
1<<1 | 2 | 0b00000010 |
1<<2 | 4 | 0b00000100 |
1<<3 | 8 | 0b00001000 |
1<<4 | 16 | 0b00010000 |
1<<5 | 32 | 0b00100000 |
1<<6 | 64 | 0b01000000 |
1<<7 | 128 | 0b10000000 |
1>>1 | 0 | 0b00000000 |
1>>4 | 0 | 0b00000000 |
Для лучшего понимания приведу так же пример со сдвигом десятичного числа 27, что в двоичном представлении 0b00011011:
Запись сдвига | десятичный результат | Битовое представление |
27<<1 | 54 | 0b00110110 |
27<<4 | 176 | 0b10110000 |
27>>1 | 13 | 0b00001101 |
27>>3 | 3 | 0b00000011 |
Спасибо что читали, на этом пока все.