Использование специального типа данных 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