Hay un tipo de datos Arduino especial, no estándar llamado " boolean ".
¿Cómo se compara con el tipo de datos estándar de C ++ " bool ", ¿y cuáles son las razones para usar uno u otro?
Si son idénticos en uso, ¿por qué existen ambos y cuál es el preferido en el código Arduino?
Comentarios
Responder
Mientras que las otras respuestas dan información generalmente útil, los autores parecen no haber leído la pregunta con mucho cuidado porque están hablando del tipo bool en lugar del booleano tipo. En la API de Arduino, boolean
es un alias de tipo para bool
, como se define en Arduino.h:
https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125
typedef bool boolean;
Para que pueda usar el tipo boolean
tal como lo haría bool
y cualquier referencia de programación C ++ estándar le indicará el uso de bool
. Por esta razón, las otras respuestas que se refieren erróneamente a bool
siguen siendo algo útiles.
Aparentemente, en algún momento del pasado, la gente de Arduino decidió el nombre boolean
sería más amigable para los principiantes que bool
, quizás para ser consistente con el lenguaje de procesamiento . Sin embargo, como se explica aquí:
https://github.com/arduino/Arduino/issues/4673
lo innecesario El uso de un tipo no estándar ahora es considerado por algunos como una mala decisión, ya que su uso hace que el código sea menos portátil y realmente no proporciona ninguna ventaja clara sobre bool
. Una propuesta es en proceso de eliminar el uso de boolean
de todo el código oficial de Arduino y el documento bool
en la referencia de Arduino y algunos incluso desean desaprobar formalmente boolean
. Por lo tanto, mi consejo es usar bool
en lugar de boolean
en su código.
Respuesta
Un tipo de variable booleana es aquel que tiene solo 2 valores posibles, true
o false
. Internamente, se crea como un int
(entero de 16 bits) o un uint8_t
tipo (entero de 8 bits).
Puede asignar el «val ues «de true
o false
usando el operador de asignación:
bool foo; foo = true; if (foo) { do_something(); }
Internamente, una true
es una 1
y una false
es una 0
, y los valores numéricos podrían sustituirse por igual.
Los tipos booleanos en Arduino y C ++ existen principalmente para facilitar la lectura, y no para una eficiencia particular sobre el tipo int
.
Respuesta
La referencia oficial se puede encontrar aquí
Es mejor use siempre verdadero y falso, y no use números.
A continuación se dan algunos ejemplos
Asigne falso resp verdadero a un booleano:
bool a = true; bool b = false;
Verifique el valor booleano:
if (b) { // Executed when b is true } else { // Executed when b is false } if (a && b) { // Executed when a is true and b is true } if (a || b) { // Executed when a is true or b is true }
Si b es falso, a será falso; de lo contrario, a permanecerá como estaba
a &= b;
Si b es verdadero, a será verdadero, de lo contrario a permanecerá como estaba
a |= b;
// Si a es verdadero, será falso y viceversa.
a = !a;
Comentarios
- Ese último debería ser a =! a ¿No debería ' t? ~ no es bit a bit.Dependiendo de cómo se defina verdadero, ~ verdadero puede seguir siendo cierto.
boolean
es un alias de tipo no estándar parabool
establecido en la biblioteca principal de Arduino y, por lo tanto, es muy específico de Arduino. Vea mi respuesta para obtener más detalles.