Arduino — Операторы — CoderLessons.com
Оператор – это символ, который указывает компилятору выполнять определенные математические или логические функции. Язык C богат встроенными операторами и предоставляет следующие типы операторов:
- Арифметические Операторы
- Операторы сравнения
- Булевы операторы
- Битовые операторы
- Составные операторы
Арифметические Операторы
Предположим, что переменная A содержит 10, а переменная B содержит 20, тогда –
Показать пример
Имя оператора | Оператор простой | Описание | пример |
---|---|---|---|
оператор присваивания | знак равно | Сохраняет значение справа от знака равенства в переменной слева от знака равенства. | A = B |
прибавление | + | Добавляет два операнда | А + Б даст 30 |
вычитание | – | Вычитает второй операнд из первого | A – B даст -10 |
умножение | * | Умножьте оба операнда | А * Б даст 200 |
деление | / | Разделите числитель на знаменатель | Б / у даст 2 |
по модулю | % | Оператор модуля и остаток от целочисленного деления | B% A даст 0 |
Операторы сравнения
Предположим, что переменная A содержит 10, а переменная B содержит 20, тогда –
Показать пример
Имя оператора | Оператор простой | Описание | пример |
---|---|---|---|
равно | == | Проверяет, равно ли значение двух операндов или нет, если да, тогда условие становится истинным. | (A == B) не соответствует действительности |
не равно | знак равно | Проверяет, является ли значение двух операндов равным или нет, если значения не равны, тогда условие становится истинным. | (A! = B) верно |
меньше, чем | < | Проверяет, меньше ли значение левого операнда, чем значение правого операнда, если да, тогда условие становится истинным. | (A <B) верно |
лучше чем | > | Проверяет, больше ли значение левого операнда, чем значение правого операнда, если да, тогда условие становится истинным. | (A> B) не соответствует действительности |
меньше или равно | <= | Проверяет, меньше ли значение левого операнда или равно значению правого операнда, если да, тогда условие становится истинным. | (A <= B) верно |
больше или равно | > = | Проверяет, больше ли значение левого операнда или равно значению правого операнда, если да, тогда условие становится истинным. | (A> = B) не соответствует действительности |
Булевы операторы
Показать пример
Имя оператора | Оператор простой | Описание | пример |
---|---|---|---|
а также | && | Называется логический оператор И. Если оба операнда отличны от нуля, тогда условие становится истинным. | (A && B) верно |
или же | || | Вызывается логическим оператором ИЛИ. Если любой из двух операндов не равен нулю, тогда условие становится истинным. | (A || B) верно |
не | ! | Вызывается логическим оператором НЕ. Используйте для изменения логического состояния своего операнда. Если условие истинно, то оператор Логический НЕ будет делать ложь. | ! (A && B) неверно |
Битовые операторы
Предположим, что переменная A содержит 60, а переменная B содержит 13, тогда –
Показать пример
Имя оператора | Оператор простой | Описание | пример |
---|---|---|---|
а также | & | Двоичный оператор AND немного копирует результат, если он существует в обоих операндах. B) даст 49, который является 0011 0001 | |
не | ~ | Оператор дополнения двоичных единиц является унарным и имеет эффект «переворачивания» битов. | (~ A) даст -60, что составляет 1100 0011 |
сдвиг влево | << | Двоичный оператор левого сдвига. Значение левого операнда перемещается влево на количество битов, указанное правым операндом. | << 2 даст 240, что составляет 1111 0000 |
сдвиг вправо | >> | Оператор двоичного правого сдвига. Значение левого операнда перемещается вправо на количество битов, указанное правым операндом. | A >> 2 даст 15, что 0000 1111 |
Составные операторы
Показать пример
Операторы сравнения:
x==y(xравенy)
x!=y(xнеравенy)
x<y(xменьшеy)
x>y(xбольшеy)
x<=y(xменьше или равноy)
x>=y(xбольше или равноy)
Внимание:
Остерегайтесь использования символа одиночного равенства (if(x=10)). В этом случае выполниться присваивание переменнойxзначения, равного 10. Вместо этого необходимо использовать символ двойного равенства (ifx==10), который как раз и сравнивает, равно значение переменной 10 или нет. Предыдущая запись будет всегда верной.
Учтите, что ifвозвращаетTRUEпри любом ненулевом значении.
ifможет использоваться в виде полной структурыif…else
If / else
if/elseдает больший контроль над выполнением кода, поскльку в случае верного условия выполняется только один блок операторов и в другом случае — только другой блок операторов.
if(pinFiveInput< 500)
{
// Действие А
}
else
{
// действие B
}
Также, возможно расширение количества вариантов за счет использования elseifпомимо блокаelse.
if (pinFiveInput < 500)
{
// Действие A
}
else if (pinFiveInput >= 1000)
{
// Действие B
}
else
{
// Действие C
}
Логические операции
Могут быть использованы в оператjрах условия.
&&(логическое И)
Истинно только при выполнении обоих условий, например:
if (digitalRead(2) == HIGH && digitalRead(3) == HIGH) {
// …
}
||(логическое ИЛИ)
Истинно, если хотя бы одно из условий выполняется:
if(x> 0 ||y> 0) {
// …
}
!(НЕ)
Истинно если оператор ложен (false)
if(!x) {
// …
}
Внимание:
Логическое И &&(двойной амперасанд) и побитовое И &(одинарный амперсанд) — разные операторы
Также, не стоит путать логическое ИЛИ || (двойная черта) и побитовое ИЛИ operator| (одинарная черта).
Побитовое НЕ ~(тильда) выглядит иначе, чем логическое НЕ !(знак восклицания), но вы должны быть уверены, какой именно использовать.
Указатели и ссылки
&(ссылка) и*(указатель)
Указатели и ссылки являются одними из самых сложных предметов для новичков в программировании.
Битовые операции с переменными проводятся на битовом уровне. Данные операции позволяют решать многие проблемы программирования. Представленный материал поможет долстаточно полно разобраться с битовыми операциями.
Описание и синтаксис
Побитовое И (&)
Побитовое И в языке C это одиночный амперсанд (&), используется между двух выражений. Побитовое И оперирует с каждым битом переменных по отдельности, руководствуся правилом — если оба бита перменных одного разряда равны 1, то результатом также будет 1 в данном разряде. В любом другом случае в результате получится ноль.
0 0 1 1 операнд1
0 1 0 1 операнд2
———-
В Arduino, тип данных int занимает 16-бит, поэтому использование & между двумя переменными типа int вызывает одновременное сравнение 16 бит. Рассмотрим этот код:
int a = 92; // в битовом виде: 0000000001011100
int b = 101; // в битовом виде: 0000000001100101
int c = a & b; // результат: 0000000001000100, или 68 в десятичной системе счисления. операнд2) — возвращаемый результат
По другому алгоритм можно описать так — если биты различны, возвращается 1 и возвращается 0 если они одинаковы.
побитовый сдвиг влево (<<), побитовый сдвиг вправо(>>)
Описание:
Данные два оператора сдвигают влево или вправо значения битов переменной слева на количество, указанное в переменной справа.
Синтаксис:
переменная << число бит
переменная >> число бит
Параметры:
переменная — (byte, int, long) число <= 32
Пример:
int a = 5; // в битовом виде: 0000000000000101
int b = a << 3; // в битовом виде: 0000000000101000, или 40 в десятичной системе счисления
int c = b >> 3; // в битовом виде: 0000000000000101, или 5 с чего мы и начали
Вы можете легко потерять биты, слишком много сдвинув их влево:
int a = 5; // binary: 0000000000000101
int b = a << 14; // binary: 0100000000000000 — старшая 1 в 101 была потеряна
Самым простым способом применения операторов сдвига является нахождение степени числа 2.
1 << 0 == 1
1 << 1 == 2
1 << 2 == 4
1 << 3 == 8
…
1 << 8 == 256
1 << 9 == 512
1 << 10 == 1024
…
Если вы сдвигаете биты отрацительной переменной, то старший бит при сдвиге вправо копируется:
int x = -16; // binary: 1111111111110000
int y = x >> 3; // binary: 1111111111111110
Данный пример выдает не то что нам нужно. Чтобы старший бит не копировался, необходимо указать это:
int x = -16; // binary: 1111111111110000
int y = (unsigned int)x >> 3; // binary: 0001111111111110
Если вы осторожны в своих действиях, то можете применять сдвиг вправо для деления переменных на степень двойки.
Например:
int x = 1000;
int y = x >> 3; // целочисленное деление 1000 на 8, возвратит y = 125.
Советы программисту:
данные операции выполняются с высоким быстродействием, так как работа идет с целочисленными переменными. В результате умножение и деление на 2 выполняется едва ли не за 1 такт.
Побитовое НЕ (~)
Побитовое НЕ в C++ обозначается символом тильды ~. В отличие от & и |, побитовое НЕ не сравнивает биты, а просто инвертирует их. Все что было 1 становится 0 и наоборот, Например:
0 1 операнд1
———-
1 0 ~ операнд1
int a = 103; // binary: 0000000001100111
int b = ~a; // binary: 1111111110011000 = -104
Arduino IDE: оператор сравнения или отношения
ВведениеОператор отношения — это оператор, который проверяет связь между двумя объектами. Результат оператора отношения либо истина, либо ложь.
В программировании истина представлена как ‘1’ , а ложь представлена как ‘0’ .
В Arduino IDE есть 6 реляционных операторов:
Реляционные операторы | Символ оператора | Пример |
---|---|---|
Больше | > | текущий год > 2015 |
Менее | 2015 | |
Больше или равно | >= | currentYear >= 2017 |
Меньше или равно | 2017 | |
Равен | == | векГод == 2000 |
Не равно | != | векГод != 1999 |
Это приводит к истинному только , если первое число больше второго числа. Если первое число меньше или равно второму, оно ложно. Ниже приведен пример:
Результатом операции будет:
7 больше 4: 1
7 больше 10: 0
Меньше чем (
<)В результате получается истинное число только , если первое число меньше второго числа. Если первое число больше или равно второму, оно ложно. Ниже приведен пример:
Результат операции:
На 7 меньше 4: 0
На 7 меньше 10: 1
Это приводит к истине, если первое число больше или равно второму числу. Если первое число меньше второго, то оно ложно. Ниже приведен пример:
Результат операции:
7 больше или равно 10: 0
7 больше или равно 7: 1
Это приводит к истине, если первое число меньше или равно второму числу. Если первое число больше второго, оно дает false. Ниже приведен пример:
Результат операции:
На 7 меньше или равно 4: 0
На 7 меньше или равно 7: 1
3 приводит к истинному
только , если первое число равно второму числу; в противном случае это приводит к ложному результату. Ниже приведен пример:Результат операции:
Является ли 7 равным 10: 0
Является ли 7 равным 7: 1
Результатом является true, если первое число равно , а не равно второму числу; в противном случае это приводит к ложному результату. Ниже приведен пример:
Результат операции:
7 не равно 10: 1
7 не равно 7: 1
Об этом руководстве
В этом руководстве рассматриваются логические операторы и различные типы логических операторов в Arduino IDE, такие как оператор И, оператор ИЛИ и оператор НЕ.
Информация об обучении
Требуемые компоненты
Изображение | Компонент | Количество | Доступно в комплекте |
---|---|---|---|
ивив | 1 |
| |
Кабель USB A-B | 1 |
|
Логические операторы оценивают один или два реляционных или логических оператора. В Arduino IDE есть 3 логических оператора:
Логический оператор | Символ оператора | Пример |
---|---|---|
ИЛИ | || | а || б |
И | && | а && б |
НЕ | ! | ! |
Структура
(Утверждение 1) || (Утверждение2)
Логический оператор ИЛИ дает значение true, если Утверждение1 или Утверждение2 или оба верны. Если оба утверждения ложны, то это приведет к ложности. Ниже приведена его таблица истинности:
Утверждение1 | Утверждение2 | Утверждение1 || Статеймен2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Ниже приведен пример, показывающий, как использовать Logic или Оператор:
Выход последовательного монитора:
Результат 1: 1
Результат 2: 1
2: 1
2: 1
Результат 3: 1
Результат 4: 0
Структура
(Заявление 1) (Заявление 1) (Заявление 1). И оператор выдает истину только , если Заявление 1 и Заявление 2 верны. Если либо Statement1 , либо Statement2 , либо оба являются ложными, результат будет ложным. Ниже, если таблица истинности:
Выписка1 | Выписка2 | Выписка1 || Statemen2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Ниже приведен пример использования логического оператора И :
Последовательный выход монитора:
Результат 1: 1
Результат 2: 0
Результат 3: 0
Результат 4: 0
Структура
! Оператор
Оператор NOT проверяет, дает ли оператор значение 0 или нет.