1. Сдвиг переменной
  2. Битовые операторы (&,|,^,~,<<,>>)
  3. Логические операторы (||, &&, !, ==, !=, >, <, >=, <=)
  4. Условный оператор (?)
  5. Оператор Запятая (,)

Сдвиг переменной на n бит

В микроконтроллерах часто приходиться работать с данными на «низком» уровне. Поэтому коснемся темы сдвига битов переменной.

unsigned char foo; // должна быть описана как целая без знака, иначе логический сдвиг вправо превратиться в арифметический.

foo = (foo >> 1); // сдвиг на 1 вправо
foo = (foo << 2); // сдвиг на 2 влево

Сдвиг с вращением битов переменной

unsigned char foo; // должна быть описана как целая без знака

foo = (foo >> 1) | (foo << 7); // вращение вправо на 1 бит
foo = (foo << 1) | (foo >> 7); // вращение влево

unsigned int foo; // должна быть описана как целая без знака

foo = (foo >> 1) | (foo << 15); // вращение вправо на 1 бит
foo = (foo << 1) | (foo >> 15); // вращение влево


Битовые операторы (&,|,^,~,<<,>>)

Эти операции будут всегда присутствовать в наших программах.

Оператор

ASM эквивалент

Описание

&

AND

Побитовый оператор И

И

0011

0101

0001

|

OR

Побитовое включающее или

ИЛИ

0011

0101

0111

^

XOR

Побитовое исключающее или

Искл.

ИЛИ

0011

0101

0110

~

НЕ

Унарный дополнение (бит инверсии)

НЕ

01

10

<< 

SHL

Сдвиг влево

>> 

SHR

Сдвинуть вправо

 


test & 0b10000000 истинно, если в 7 разряде test «1».

Примеры

// проверка разрядов, где стоят 1 на наличия 1

// е.е. когда в 7 и 6 разрядах единицы (остальные не имеют значения)

// тогда выражение истинно

// проверка разрядов, где стоят 0 на наличия 0

// е.е. когда в 7 и 6 разрядах нули (остальные не имеют значения)

// тогда выражение истинно


Логические операторы (||, &&, !, ==, !=, >, <, >=, <=)

 Необходимо ясно представлять различие между битовыми и логическими операторами. Битовые выполняют операции над данными по битам и возвращают результат данные. Логические операторы оперируют общим значение с данными ИСТИНА или ЛОЖЬ и возвращают значение ИСТИНА или ЛОЖЬ (1 или 0).

|| логическая операция ИЛИ
&& логическая операция И
! логическая операция НЕ
== Равно
!= Не равно
> Больше, чем
< Меньше чем
>= Больше или равно
<= Меньше или равно
Вот несколько примеров:

(7 == 5)     // эквивалентно ЛОЖЬ.
(5 > 4)       // эквивалентно ИСТИНА.
(3 != 2)      // эквивалентно ИСТИНА.
(6 >= 6)     // эквивалентно ИСТИНА.
(5 < 5)       // эквивалентно ЛОЖЬ.
!(5 ==5)   // (5 ==5) – ИСТИНА, а ! – получаем ЛОЖЬ.

 ЛОЖЬ когда полученное выражение равно нулю. ИСТИНА – когда полученное выражение больше нуля.

Конечно вместо того, чтобы с помощью только числовые константы, мы можем использовать любое допустимое выражение, включая переменные. Предположим, что = 2, b = 3 и c = 6.

(a == 5)     // эквивалентно ЛОЖЬ, так «a» не равняется 5.
(a*b >= c)   // эквивалентно ИСТИНА, так как выражение (2*3 >= 6) ИСТИНА.
(b+4 > a*c)  // эквивалентно ЛОЖЬ, так  как выражение (3+4 > 2*6) ЛОЖЬ.
((b=2) == a) // эквивалентно ИСТИНА.

Будь осторожен! Оператор = (один знак равенства) не является таким же, как оператор == (два равных знаки), первый из них является оператором присваивания (присваивает значение, стоящее справа переменной слева) и другая (==) является оператор равенства, который сравнивает ли оба выражения в обе стороны от него равны друг другу.

Таким образом, в последнем выражении ((b=2) == а), мы сначала присвоено значение 2 к b и затем мы сравнил его звучание с а , который также хранит значение 2, поэтому результат операции является значение true.


Условный оператор (?)

? – условный оператор (знак вопроса)

состояние? result1: result2

Если условие имеет значение true, выражение будет возвращать result1, если это не она будет возвращать result2.

Пример:


Оператор Запятая (,)

Оператор Запятая (,) используется для разделения двух или более выражений, которые включены, где ожидается только одно выражение.

Когда набор выражений должна оцениваться с точки зрения значение, рассматривается только крайнего правого выражения.

Например, следующий код:

Будет вначале присвоить значение 3 – b переменной, а затем вычислено b + 2. Таким образом, в конце, переменная a будет содержать значение 5, переменная b будет содержать значение 3.


Это может быть интересно


  • PIC32MZ – Core Timer (библиотека)PIC32MZ – Core Timer (библиотека)
    Переработанные файлы от Microchip, библиотека для работы с Core Timer. Метки:PIC32MZ
  • Четырех канальный терморегулятор ch-4000Четырех канальный терморегулятор ch-4000
     Четыре независимых канала регулирования температуры, одновременно можно подключить 16 датчиков температуры DS18B20 с удалением до трехсот метров. Можно для регулировки выбрать любой датчик, подключенный к устройству. Каждый канал может работать как в …
  • Проект с использованием MCC часть 09Проект с использованием MCC часть 09
      Эта часть будет посвящена созданию практического проекта управления освещение. Тех задание: Два выхода управления ШИМ – светодиодным освещением. Две кнопки управления, каждая кнопка управляет, своим каналом, логика самая простая, нажимаем …
  • Датчик приближения от Румена ЖелеваДатчик приближения от Румена Желева
    Проект на Болгарском языке. Автор Румен Желев. Болгария. Проект,  датчик приближения в котором устранены все недостатки влияния засветки посторонними источниками. Применен совершенно оригинальный принцип контроля ИК излучения. Основната идея на …
  • Гаджеты для домашней автоматики – Датчик движенияГаджеты для домашней автоматики – Датчик движения
    Управление светодиодным освещением – Датчик движения. Данный гаджет предназначен для управления освещением рабочих столов (кухонных столов), освещение прихожих, освещение зеркал в прихожих, автоматическое включение света в коридорах. Датчик позволяет определить наличие …
  • MPLAB® Harmony – или как это просто! Часть 2.MPLAB® Harmony – или как это просто! Часть 2.
    Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из трудоемкого варианта …
  • Светодиоды со встроенным драйвером WS2812BСветодиоды со встроенным драйвером WS2812B
    Производитель http://www.world-semi.com Краткое описание продукции фирмы Каталог продукции” catcatcat_ws_19 catcatcat_ws_15 catcatcat_ws_11 catcatcat_ws_07 catcatcat_ws_03 catcatcat_ws_18 catcatcat_ws_14 catcatcat_ws_10 catcatcat_ws_06 catcatcat_ws_02 catcatcat_ws_05 catcatcat_ws_09 catcatcat_ws_13 catcatcat_ws_17 catcatcat_ws_16 catcatcat_ws_12 catcatcat_ws_08 catcatcat_ws_04 catcatcat_ws_01 This jQuery slider was …
  • Проект с использованием MCC часть 06Проект с использованием MCC часть 06
    Изменим схему следующим образом добавим две тактовые кнопки BT1 и BT2. Теперь переключимся на конфигурацию выводов, для этого сделаем двойной клик в окне Ресурсы проекта на Pin Module. В окне Pin …
  • OLED RET012864E/REX012864JOLED RET012864E/REX012864J
    RET012864E/REX012864J ОЛЕД индикатор производитель Raystar-Optronics приобретался в http://www.microchip.ua/ к сожалению никакой информации на сайте поставщика нет. Поэтому решил работу с этой версией индикатора на драйвере SSD1305 предоставить на своем сайте. Так как есть ошибки …
  • Проект с использованием MCC часть 03Проект с использованием MCC часть 03
    Первым делом перенастроим регистры конфигурации, следующим образом: Отключим выход генератора (CLKOUT function is disabled. I/O function on the CLKOUT pin) Включим сторожевой таймер (WDT enabled) После этой настройки мы должны …




Translate »

Copyright © Catcatcat electronics 2013-2020. Все права защищены.
Копирование разрешается только с указанием активной ссылки на правообладателя.

e-mail: catcatcat.electronics@gmail.com