Views: 3228
- Сдвиг переменной
- Битовые операторы (&,|,^,~,<<,>>)
- Логические операторы (||, &&, !, ==, !=, >, <, >=, <=)
- Условный оператор (?)
- Оператор Запятая (,)
Сдвиг переменной на 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 |
Побитовый оператор И
|
||||
|
| |
OR |
Побитовое включающее или
|
||||
|
^ |
XOR |
Побитовое исключающее или
|
||||
|
~ |
НЕ |
Унарный дополнение (бит инверсии)
|
||||
|
<< |
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) // эквивалентно ЛОЖЬ. |
ЛОЖЬ когда полученное выражение равно нулю. ИСТИНА – когда полученное выражение больше нуля.
Конечно вместо того, чтобы с помощью только числовые константы, мы можем использовать любое допустимое выражение, включая переменные. Предположим, что = 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.
Это может быть интересно
Применение typedef, struct и unionViews: 8914 Полезные описания переменных Часто необходимо в памяти расположить последовательно разные виды данных, что бы потом можно было их использовать. Полезные ссылки Взято и переработано с сайта http://www.butovo.com/~zss/cpp/struct.htm http://cppstudio.com/post/9172/ …
Простой цифровой регулятор мощностиViews: 7776 Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью …
Pogo Pin Connector LibViews: 31 У своїх проектах почав застосовувати з’єднувачі та контакти типу Pogo Pin. Для цього до своєї існуючої БД додав нову бібліотеку. Огляд від ІІ Pogo Pin (погопін) – це …
CAN – Controller Area NetworkViews: 1255 Controller Area Network (CAN) первоначально был создан немецким поставщиком автомобильных систем Робертом Бош в середины 1980-х для автомобильной промышленности как метод для обеспечения возможности надежной последовательной связи. Целью было сделать автомобили более надежными, …
Счетчики посетителейViews: 1300 Вас сосчитали!? или счетчики посетителей. Для чего нужны счетчики посетителей? Какие они бывают? ТОРГОВЛЯ. Подсчитайте, сколько ваш магазин посещает человек за день. Кок много человек приходит утром, какое …
Altium Designer my setup system and project structure V23.3Views: 420 Оновлення бази даних та шаблонів від березня 2023 року. Updating the database and templates from March 2023. Altium Designer my Libraries, Project templates, System settings by Catcatcat. Дивись …
Стробоскоп для автомобиляViews: 2248 Одним из популярных решений светового тюнинга автомобиля, мотоцикла или скутера стал эффект – “полицейский стробоскоп“. На база платы ch-c0050 реализовано несколько проектов. В этой статье приводятся две версии …
APA102 – светодиоды со встроенным драйвером и SPI интерфейсомViews: 3549 APA102 В 2014 году фирма Shenzhen Led Color Optoelectronic Co., Ltd http://www.szledcolor.com/ начала производство светодиодов на драйвере APA102. Это серия так называемых светодиодов со встроенным драйвером. Основной особенностью этих …
MAX7219/21 и 8х8 LED дисплеиViews: 1070 MAX7219, MAX7221 предназначены для вывода информации на 8 разрядов семисегментного индикатора, но на нем легко организовать вывод на светодиодные индикаторы 8х8. продолжение следует…. Это может быть интересно
Простой оптический сенсор приближенияОптический сенсор, назначение оптический концевик, для автоматики, бесконтактный выключатель с функцией автоматического отключения...