Esiste un tipo di dati Arduino speciale e non standard chiamato " boolean ".
Come si confronta con il tipo di dati C ++ standard " bool ", e quali sono i motivi per utilizzare luno o laltro?
Se sono identici nelluso, perché esistono entrambi e quale è il preferito nel codice Arduino?
Commenti
Risposta
Mentre le altre risposte forniscono informazioni generalmente utili, gli autori sembrano non aver letto la domanda con molta attenzione perché parlano del tipo bool anziché del tipo booleano tipo. NellAPI di Arduino, boolean
è un alias di tipo per bool
, come definito in Arduino.h:
https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125
typedef bool boolean;
Quindi puoi utilizzare il boolean
digita proprio come faresti con bool
e qualsiasi riferimento alla programmazione C ++ standard ti istruirà sulluso di bool
. Per questo motivo le altre risposte che erroneamente si riferiscono a bool
sono ancora piuttosto utili.
Apparentemente a un certo punto in passato la gente di Arduino ha deciso il nome boolean
sarebbe più adatto ai principianti di bool
, forse coerente con il linguaggio di elaborazione . Tuttavia, come discusso qui:
https://github.com/arduino/Arduino/issues/4673
il non necessario luso di un tipo non standard è ora considerato da alcuni una decisione sbagliata in quanto il suo utilizzo rende il codice meno portabile e in realtà non fornisce alcun chiaro vantaggio rispetto a bool
. Una proposta è in fase di elaborazione per rimuovere luso di boolean
da tutto il codice ufficiale di Arduino e dal documento bool
nel riferimento ad Arduino e alcuni desiderano addirittura deprecarlo boolean
. Pertanto, il mio consiglio è di utilizzare bool
invece di boolean
nel codice.
Risposta
Un tipo di variabile booleana è quello che ha solo 2 valori possibili, true
o false
. Internamente, viene creato come int
(numero intero a 16 bit) o uint8_t
tipo (numero intero a 8 bit).
Puoi assegnare il valore “val ues “di true
o false
utilizzando loperatore di assegnazione:
bool foo; foo = true; if (foo) { do_something(); }
Internamente, un true
è un 1
e un false
è un 0
e i valori numerici potrebbero essere ugualmente sostituiti.
I tipi booleani in Arduino e C ++ esistono principalmente per la leggibilità e non per una particolare efficienza rispetto al tipo int
.
Risposta
Il riferimento ufficiale può essere trovato qui
È meglio usa sempre vero e falso e non usare numeri.
Di seguito vengono forniti alcuni esempi
Assegna false e false a un valore booleano:
bool a = true; bool b = false;
Controlla il valore 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 }
Se b è falso, a sarà falso, altrimenti a rimarrà comera
a &= b;
Se b è vero, a sarà vero, altrimenti a rimarrà comera
a |= b;
// Se a è vero, sarà falso e viceversa.
a = !a;
Commenti
- Questultimo dovrebbe essere a =! a shouldn ' vero? ~ non è un bit a bit.A seconda di come viene definito vero, ~ vero può ancora essere vero.
boolean
è un alias di tipo non standard perbool
impostato nella libreria principale di Arduino e quindi è molto specifico per Arduino. Vedi la mia risposta per i dettagli.