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.
booleanes un alias de tipo no estándar paraboolestablecido en la biblioteca principal de Arduino y, por lo tanto, es muy específico de Arduino. Vea mi respuesta para obtener más detalles.