Использование специального типа данных Arduino "boolean" вместо стандартного типа данных "bool"
Существует специальный, нестандартный тип данных Arduino, называемый "boolean".
Как он сравнивается со стандартным типом данных C ++ "bool" и каковы причины использования того или иного?
Если они идентичны в использовании, почему оба существуют и какой из них предпочтительнее в коде Arduino?
@, 👍3
Обсуждение3 ответа
Тип булевой переменной - это переменная, которая имеет только 2 возможных значения: true
или false
.
Внутренне он создается как int
(16-битное целое число) или тип uint8_t (8-битное целое число).
Вы можете присвоить "значения" true
или false
с помощью оператора присваивания:
bool foo;
foo = true;
if (foo) {
do_something();
}
Внутренне true
- это 1
, а false
- 0
, и числовые значения могут быть одинаково подставлены.
Булевы типы в Arduino и C ++ в основном существуют для удобочитаемости, а не для какой-либо конкретной эффективности по сравнению с типом int.
Официальную ссылку можно найти здесь
Лучше всего всегда использовать true и false, а не цифры.
Ниже приведены некоторые примеры
Присвоить логическому значению false resp true:
bool a = true;
bool b = false;
Проверьте логическое значение:
if (b)
{
// Выполняется, когда b равно true
}
else
{
// Выполняется, когда b равно false
}
if (a && b)
{
// Выполняется, когда a истинно, а b истинно
}
if (a || b)
{
// Выполняется, когда a равно true или b равно true
}
Если b ложно, то a будет ложным, в противном случае a останется таким, каким оно было
a &= b;
Если b истинно, то a будет истинно, в противном случае a останется таким, каким оно было
a |= b;
// Если a истинно, то оно будет ложным и наоборот.
a = !a;
Этот последний должен быть a = !a не так ли? ~ - это побитовое нет. В зависимости от того, как определяется true ~true все еще может быть true., @Delta_G
В то время как другие ответы дают в целом полезную информацию, авторы, похоже, не очень внимательно прочитали вопрос, потому что они говорят о типе bool, а не о логическом типе. В API Arduino boolean
- это псевдоним типа для bool
, как определено в Arduino.h:
https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125
typedef bool boolean;
Таким образом, вы можете использовать логический
тип так же, как и bool
, и любой стандартный справочник по программированию на C ++ проинструктирует вас об использовании bool
. По этой причине другие ответы, которые ошибочно ссылаются на bool
, все еще несколько полезны.
Очевидно, в какой-то момент в прошлом люди Arduino решили, что имя boolean
будет более удобным для начинающих, чем bool
, возможно, чтобы соответствовать языку обработки. Однако, как обсуждалось здесь:
https://github.com/arduino/Arduino/issues/4673
ненужное использование нестандартного типа в настоящее время считается некоторыми плохим решением, поскольку его использование делает код менее переносимым и на самом деле не дает никакого явного преимущества перед bool
. В настоящее время разрабатывается предложение удалить использование boolean
из всего официального кода Arduino и документировать bool
в справочнике Arduino, а некоторые даже хотят официально отказаться от boolean
. Поэтому мой совет - использовать bool
вместо boolean
в вашем коде.
- C++ против языка Arduino?
- Как использовать SPI на Arduino?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: expected unqualified-id before 'if'
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
- Библиотека DHT.h не импортируется
- ошибка: ожидаемое первичное выражение перед токеном ','
Это базовый вопрос программирования, не специфичный для Arduino. [The Definitive C++ Book Guide and List] (https://stackoverflow.com/q/388242/669576 ). Или [Google] (https://www.google.com/search ?q=c%2B%2B+логическое значение), @Johnny Mopp
Добро пожаловать на Arduino Stack Exchange. Пожалуйста, пройдите экскурсию по адресу https://arduino.stackexchange.com/Tour чтобы получить максимальную отдачу от этого сайта. Boolean означает двоичный, как true / false . Сделайте поиск в Google в разделе "Типы данных Arduino", чтобы узнать об этом., @SDsolar
Я не согласен с тем, что это не конкретный вопрос Arduino. `boolean" - это нестандартный псевдоним типа для "bool", установленного в библиотеке Arduino core, и поэтому он очень специфичен для Arduino. Подробности смотрите в моем ответе., @per1234
Переименование чего-то не означает, что оно специфично для Arduino., @Avamander