Există un tip de date special, non-standard Arduino numit " boolean ".
Cum se compară cu tipul de date standard C ++ " bool " și care sunt motivele pentru a utiliza unul sau altul?
Dacă sunt identice în utilizare, de ce există ambele și care este preferat în codul Arduino?
Comentarii
Răspuns
În timp ce celelalte răspunsuri oferă informații utile în general, autorii par să nu fi citit întrebarea foarte atent deoarece vorbesc despre tipul bool mai degrabă decât despre tipul boolean tip. În API-ul Arduino, boolean
este un alias de tip pentru bool
, așa cum este definit în Arduino.h:
https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125
typedef bool boolean;
Deci puteți utiliza tipul boolean
la fel cum ați face bool
și orice referință standard de programare C ++ vă va instrui în utilizarea bool
. Din acest motiv, celelalte răspunsuri care în mod eronat se referă la bool
sunt încă oarecum utile.
Se pare că la un moment dat în trecut oamenii Arduino au decis numele boolean
ar fi mai prietenos cu începătorii decât bool
, poate să fie compatibil cu limbajul de procesare . Cu toate acestea, după cum sa discutat aici:
https://github.com/arduino/Arduino/issues/4673
inutilul utilizarea unui tip non-standard este considerată acum de către unii o decizie slabă, deoarece utilizarea acestuia face codul mai puțin portabil și într-adevăr nu oferă niciun avantaj clar față de bool
. O propunere este în lucru pentru a elimina utilizarea boolean
din toate codurile și documentele oficiale Arduino bool
din referința Arduino și unii doresc chiar să renunțe boolean
. Prin urmare, sfatul meu este să utilizați bool
în loc de boolean
în codul dvs.
Răspuns
Un tip de variabilă booleană este una care are doar 2 valori posibile, true
sau false
. Intern, este creat ca un int
(întreg pe 16 biți) sau ca un uint8_t
tip (întreg pe 8 biți).
Puteți atribui „val ues „din true
sau false
utilizând operatorul de atribuire:
bool foo; foo = true; if (foo) { do_something(); }
Intern, un true
este un 1
și un false
este un 0
, iar valorile numerice ar putea fi înlocuite în mod egal.
Tipurile booleene în Arduino și C ++ există în cea mai mare parte pentru lizibilitate și nu pentru o eficiență specială de tipul int
.
Răspuns
Referința oficială poate fi găsită aici
Cel mai bine este să folosiți întotdeauna adevărat și fals și nu folosiți numere.
Mai jos sunt date câteva exemple
Atribuiți resp fals la un Boolean:
bool a = true; bool b = false;
Verificați valoarea booleană:
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 }
Dacă b este fals, a va fi fals, altfel a va rămâne așa cum a fost
a &= b;
Dacă b este adevărat, a va fi adevărat, altfel a va rămâne așa cum a fost
a |= b;
// Dacă a este adevărat, acesta va fi fals și invers.
a = !a;
Comentarii
- Acest ultim ar trebui să fie a =! a shouldn ' nu? ~ este un pic bit, nu.În funcție de modul în care este definit adevărul, adevăratul poate fi adevărat.
boolean
este un alias de tip non-standard pentrubool
setat în biblioteca de bază Arduino și, prin urmare, este foarte specific Arduino. Vedeți răspunsul meu pentru detalii.