19.01.2017 20:10 Количество просмотров материала 3648 Время на чтение ~2 мин
Увеличить | Уменьшить Распечатать страницу

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

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

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

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

Не знаю, кому и когда пришла в голову идея использовать для представления информации двоичную систему исчисления, но факт остается фактом – есть напряжение «шелезяка» ставит «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 (знакового) бита.

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

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

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

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

 

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]


Вверх