Программисту Си не привыкать работать со структурой данных, типом данных или даже с байтами. Но бывают случаи более «глубокой» работы, когда нужна проверка бита в Си. Часто такие битовые операции нужны, когда:
- нужно сжать данные — это когда данные сжимают, преобразовывая их из одного состояния в другое, чтобы достичь уменьшения пространства;
- нужно эксклюзивно поработать с байтами или битами;
- есть необходимость обеспечить должное шифрование;
- и др.
Вы, конечно же, помните, что в состав одного байта входят 8 битов и любые числа и символы могут быть представлены в компьютере при помощи битов. Биты состоят только из 0 и 1.
Проверка бита в Си при помощи побитовых операторов
Проверка бита в Си возможна только с использованием побитовых операторов. Побитовый оператор — это оператор, который используется для исполнения операций непосредственно над битами. Использование побитовых операций — это не что иное, как битовое программирование. Цель использования побитовых операторов — увеличить скорость вычислений.
Проверка бита в Си может быть осуществлена при помощи следующих операторов:
- «>>» — оператор «сдвиг вправо»;
- «<<» — оператор «сдвиг влево»;
- «~» — оператор «отрицания (NOT)»;
- «^» — оператор «исключения (XOR)»;
- «&» — оператор «И»;
- «|» — оператор «ИЛИ».
Оператор сдвига «вправо» и «влево»
В языке Си, когда осуществляется проверка бита, иногда есть необходимость сдвигать биты вправо либо влево. Это делается при помощи соответствующих операторов.
Синтаксис примера будет выглядеть следующим образом:
ОПЕРАНД<<Х
Операнд — это будет любое целое выражение, представленное в двоичной системе, к которому будет применяться сдвиг.
Х — это количество битов, на сколько нужно будет сдвинуть.
То есть в представленном синтаксисе биты будут сдвинуты влево на значение числа «Х». А правая сторона сдвига будет наполняться «0».
Допустим, у нас есть некое выражение: «в=5». В двоичной системе это будет выглядеть так: «в=0101».
Допустим, мы хотим сдвинуть представленное значение влево на 2. Тогда мы получим следующее представление:
в<<2, это значит:
0101<<2 = 00010100
В итоге получим, что «в» приобрело новое значение и «в<<2» будет равняться «20».
Сдвиги вправо работают по той же схеме, только в другую сторону.
Оператор отрицания «NOT»
Когда нужна проверка бита в Си, данный оператор отрицания «~» довольно часто используется. Также его называют еще оператором дополнения. Он может принимать значение только одного операнда и выполняет свою операцию дополнения только над ним. Применяя этот оператор к любому биту, мы получаем результат, где «0» принимает значение «1», а «1» принимает значение «0».
Пример. Допустим, у нас есть некое выражение, где в=8. Это значит, что в=1000 в двоичной системе. После применения оператора дополнения над «в» получим следующий результат и новое значение — в=0111.
Оператор исключения «XOR»
Оператор исключения, когда проводится проверка бита в Си, обозначается так: «^». Данное побитовое исключение работает следующим образом — проверяются оба операнда, и если один из битов задан как «1», а другой — «0», то и результат будет «1», во всех остальных случаях, когда значение битов одинаково, результатом будет «0».
Пример. Допустим, у нас есть 2 переменные:
х=12
у=10
В двоичной системе это будет выглядеть так:
х = 0000 1100
у = 0000 1010
Теперь проведем следующую операцию: х ^ у и получим результат:
х ^ у = 0000 0110
То есть, как видно из примера, оба значения операндов сравниваются между собой, и когда один из битов любого из операндов равен «1», а у другого — «0», то значение в результате будет «1», в других случаях, когда значения битов равны, всегда будет «0».
Проверка бита в Си при помощи оператора «И»
Проверка бита в Си иногда тесно связана с применением оператора «И», который обозначается как «&» (амперсанд). С обеих сторон оператора записываются два целых числа-значения. Происходит «сравнивание» этих значений битов. Когда значения в разных операндах равны «1», то на результате мы тоже увидим «1», в любых других сочетаниях результатом будет «0».
Пример. Допустим, у нас есть две переменные:
х = 6
у = 4
В двоичной системе это будет выглядеть так:
х = 0110
у = 0100
Применим к данным значением побитовый оператор «И» и получим следующее:
х & у = 0100
В примере видно, что, только когда в обоих значенияхзначение битов было равно «1», результатом тоже стала «1», в остальных случаях в результате записан «0».
Оператор «ИЛИ» при проверке битов в Си
Данный оператор обозначается как «|». С обеих сторон оператора должны быть записаны целочисленные значения, которые будут сравниваться. Когда в любом из значений будет найдена «1», в результате будет записана «1», даже если в обоих сравниваемых битах будет «1». В любых других случаях результатом будет «0».
Пример. Допустим, у нас есть две переменные:
х=23
у=10
В двоичной системе это будет выглядеть так:
х = 0001 0111
у = 0000 1010
Теперь применим к этим значениям побитовый оператор «ИЛИ» и получим следующий результат:
х|у = 0001 1111
В примере видно, что при обоих значениях «0» результатом тоже был «0», если же в любом из сравниваемых значений встречалась «1», то в результате мы тоже видим «1».
Заключение
Проверка бита в языке Си имеет важное значение, когда программисты работают над оптимизацией кода, особенно когда нужно сэкономить место или ускорить вычисления.
Все перечисленные побитовые операторы используются в битовом программировании в разных областях:
- системном программировании;
- во встроенном;
- в проектировании протоколов;
- и др.
Поэтому знать, как проводится проверка бита в Си, нужно даже начинающим разработчикам на этом языке, потому что рано или поздно с этим сталкиваются все.
Другое