Сдвиг переменной, Битовые операторы…

Views: 3226


  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 разрядах единицы (остальные не имеют значения)

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

if ((test & 0b10000000)&&(test & 0b01000000))test=1;
else test=0;

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

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

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

if (!(test & 0b10000000)&& !(test & 0b01000000))test=1;
else test=0;

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

 Необходимо ясно представлять различие между битовыми и логическими операторами. Битовые выполняют операции над данными по битам и возвращают результат данные. Логические операторы оперируют общим значение с данными ИСТИНА или ЛОЖЬ и возвращают значение ИСТИНА или ЛОЖЬ (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.

Пример:

7==5 ? 4 : 3       // результат 3, так как 7 не равно 5.
7==5+2 ? 4 : 3     // результат 4, так как 7 равно 5+2.
5>3 ? a : b        // результат a, так как 5 больше 3.
a>b ? a : b        // результат зависит от того какая переменная больше, a или b.

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

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

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

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

a = (b=3, b+2);

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


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


  • ch-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302ch-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302
    Views: 2499 На плате ch-4000 очень легко собрать устройство регулятора температуры и влажности. Датчик DHT11  самый недорогой вариант для создания такого устройства, правда точность его не велика, но для бытовых устройств …
  • Проект с использованием MCC часть 15Проект с использованием MCC часть 15
    Views: 1725 EUSART – Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) — узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. … читать на вики. Внесем изменения в нашу схему, …
  • CLUBBEST-50-LightCLUBBEST-50-Light
    Views: 460 CLUBBEST-50-LIGHT   Зміст Короткий опис проекту. 1 Опис схемотехніки візуалізатора музики. 2 Аудіо вхід. 3 MCU. 4 Цифровий вихід. 5 Схема живлення MCU. 6 Складання пристрою. 7 Список …
  • Дисплей KD035C-3A подключение и управлениеДисплей KD035C-3A подключение и управление
    Views: 842 Дисплей KD035C-3A производиться компанией SHENZHEN STARTEK ELECTRONIC TECHNOLOGY CO.,LTD Характеристики Параметр Спецификация Единицы измерения Размер дисплея 70.08(H)*52.56(V) (3.5inch) mm Тип дисплея TFT active matrix Цветовая гамма 65K/262K colors Разрешение …
  • BMP280 – температура и атмосферное давление – учебный проектBMP280 – температура и атмосферное давление – учебный проект
    Views: 2272 Учебный проект на PIC32 и светодиодной панели P5 (2121)-168-6432-80 (32*64). Проект позволяет ознакомиться с простой графикой и с чтением давления и температуры с датчика BMP280. Для тестирования необходимо …
  • Altium Designer my setup system and project structureAltium Designer my setup system and project structure
    Views: 1050 Используйте только последнее обновление!!! Updates https://catcatcat.d-lan.dp.ua/altium-designer-my-libraries-project-templates-system-settings-by-catcatcat-v23-09/        Тут хочу поделиться как я настраиваю Altium Designer и как я использую файлы DXPPreferences.DXPPrf для быстрой конфигурации и получения …
  • Customs codes for exportCustoms codes for export
    Views: 372   Митні коди (HS Code) для надсилання посилок за кордон. Для відправки товару за кордон на сьогодні необхідно зазначати митні коди. Часто визначення коду займає багато часу. Для …
  • CCP модуль для декодирования ИК-кодов пультов ДУCCP модуль для декодирования ИК-кодов пультов ДУ
    Views: 1148 Множество изготовителей для своих пультов дистанционного управления на ИК лучах используют принцип широтно-импульсной модуляции. В таких кодах бит единицы представляется импульсом большой длительности, а ноль импульсом короткой длительности. …
  • Мультимедийная сеть – AVC-LAN TOYOTAМультимедийная сеть – AVC-LAN TOYOTA
    Views: 5912 AVC LAN – протокол обмена данными мультимедийных систем автомобиля. Кодирование данных. При кодировании различаться три типа данных : преамбула – её назначение, это сообщение устройствам на шине, что начинается передача данных. …
  • Самый простой диммер для светодиодного освещенияСамый простой диммер для светодиодного освещения
    Views: 3197 Светодиоды все больше входят в нашу жизнь как источники освещения и как само собой разумеющееся, это вопрос регулировки яркости. Существует множество схемных решений, но в нашем варианте мы …




Поделись этим!