Теория программирования — поразрядные операции

Доброе время суток. Сегодня мы поговорим о таком виде операций, без которых невозможна работа с регистрами микроконтроллера (далее – МК), а именно – об поразрядных операциях.

Не знаю, кому и когда пришла в голову идея использовать для представления информации двоичную систему исчисления, но факт остается фактом – есть напряжение «шелезяка» ставит «1», нет напряжения – «0». От этого и исходит, что минимальной информационной единицей выступает бит – если выражение истинное (правильное) – «1», если ложное (неправильное) – «0» (бывает наоборот, но принцип сохраняется).

Из бит складывается байт (из 8 бит). Когда мы говорили о переменных, я приводил примеры сколько байт выделяется для хранения того либо иного типа данных и диапазоны задаваемых значений. Так вот, если тип переменной signed (знаковый), то |*|_|_|_|_|_|_|_| — «*» (7 бит) – отвечает за знак числа:

  • «0», если число положительное
  • «1», если отрицательное (это правило касается целых чисел, вещественные идут со знаком).

Если же unsigned (беззнаковый), то число будет только положительным, но при этом все 8 бит (с 0 по 7) формируют число.

Например. У нас есть число «187» (в 10-ной системе исчисления). В 2-ной системе исчисления оно имеет вид – «1011 1011» и занимает один байт памяти (не полный байт – перебраны не все комбинации нулей и единиц). Если же мы хотим задать « — 187» (в 10-ной), то можем воспользоваться встроенным Microsoft калькулятором и перевести число в 2-ную систему. В итоге получим «100 0101». Если же полученное число снова перевести в 10-ную – то получим результат «69». Может возникнуть неразбериха. Для того, чтобы разобраться в этом, всём сложим «187+69» и получим 256 (полностью заполненный байт — перебраны все комбинации нулей и единиц).

Если под переменную выделено два байта информации то: «187» = «1011 1011», а «-187» = «1111111101000101» = «65349». Максимальный диапазон значений 65536 для двух байт (в программировании отсчёт идёт с 0 до 65535 или 0 до 255 соответственно) Надеюсь теперь, всё прояснилось.

Операции «отрицание» ~, «и» &, «или» |, «исключающее или» ^

Побитовое И (в коде обозначается &) оперирует  двумя числами и логически умножает  биты этих чисел. Например, 8 на 5,  получаем 0

(где 1 на 1 = 1, 1 на 0 = 0 и 0 на 0 = 0 соответственно)

Побитового ИЛИ (в коде обозначается |), оперирует  двумя числами и логически суммирует  биты этих чисел (но без переноса).  Например, 8 на 5,  получаем 13

Побитовое отрицание (в коде обозначается ~) работает для всего байта целиком. Отрицание меняет 1 на 0, а 0 на 1, в каждом бите. Например,

Исключающее ИЛИ (в коде обозначается ^).

Исключающее ИЛИ действует следующим образом, где 1 и 1 = 0, в остальных случаях 0 и 1 = 1, 0 и 0 = 0.

Операции битового сдвига влево «<<» или вправо «>>», как не тривиально будет звучать, сдвигают информационные биты на заданный шаг.

Общий принцип битого сдвига следующий – есть число, которое необходимо сдвинуть и число бит, на которое его будут сдвигать.

Битовый «сдвиг влево» сдвигает биты влево и дописывает нули справа.

Если же «сдвиг вправо» производят с unsigned (беззнаковой) переменной, то этот сдвиг называется логическим (биты, что освобождаются заполняются нулями), а если тот же «сдвиг вправо» но со signed (знаковой) переменной – сдвиг арифметический (биты, что освобождаются заполняются значением 7 (знакового) бита.

Вышедшие за пределы биты – отбрасываются.

Картотека программирования

 

ПОДЕЛИТЕСЬ С ДРУЗЬЯМИ!


About alexlevchenko

Ценю в людях честность и открытость. Люблю мастерить разные самоделки. Нравится переводить статьи, ведь кроме того, что узнаешь что-то новое - ещё и даришь другим возможность окунуться в мир самоделок.

3 Replies to “Теория программирования — поразрядные операции”

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

* Copy This Password *

* Type Or Paste Password Here *