Er is een speciaal, niet-standaard Arduino-gegevenstype genaamd " boolean ".
Hoe verhoudt het zich tot het standaard C ++ -gegevenstype " bool ", en wat zijn de redenen om de ene of de andere te gebruiken?
Als ze identiek zijn in gebruik, waarom bestaan ze dan en welke heeft de voorkeur in Arduino-code?
Reacties
Answer
Hoewel de andere antwoorden over het algemeen nuttige informatie geven, lijken de auteurs de vraag niet erg zorgvuldig te hebben gelezen omdat ze het hebben over het bool type in plaats van het boolean type. In de Arduino API is boolean
een type-alias voor bool
, zoals gedefinieerd in Arduino.h:
https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125
typedef bool boolean;
U kunt dus het boolean
type precies zoals u bool
zou doen en elke standaard C ++ programmeerreferentie zal u instrueren in het gebruik van bool
. Om deze reden zijn de andere antwoorden die ten onrechte verwijzen naar bool
nog steeds enigszins nuttig.
Blijkbaar hebben de Arduino-mensen op een bepaald moment in het verleden de naam boolean
zou beginnersvriendelijker zijn dan bool
, misschien om consistent te zijn met de verwerkingstaal . Zoals hier besproken:
https://github.com/arduino/Arduino/issues/4673
de onnodige het gebruik van een niet-standaardtype wordt door sommigen nu als een slechte beslissing beschouwd, aangezien het gebruik ervan code minder draagbaar maakt en eigenlijk geen duidelijk voordeel oplevert ten opzichte van bool
. Een voorstel is in de maak om het gebruik van boolean
uit alle officiële Arduino-code en document bool
in de Arduino-referentie te verwijderen en sommigen willen zelfs formeel afschaffen boolean
. Daarom is mijn advies om bool
te gebruiken in plaats van boolean
in je code.
Answer
Een Booleaans variabeletype heeft slechts 2 mogelijke waarden, true
of false
. Intern wordt het gemaakt als een int
(16-bits geheel getal) of een uint8_t
type (8-bits geheel getal).
U kunt de “val ues “of true
of false
met de toewijzingsoperator:
bool foo; foo = true; if (foo) { do_something(); }
Intern is een true
een 1
en een false
is een 0
, en de getalswaarden kunnen op dezelfde manier worden vervangen.
Booleaanse typen in Arduino en C ++ bestaan meestal voor leesbaarheid, en niet voor een bepaalde efficiëntie ten opzichte van het int
type.
Antwoord
De officiële referentie is hier te vinden
Het is het beste om gebruik altijd true en false, en gebruik geen getallen.
Hieronder worden enkele voorbeelden gegeven
Wijs false resp true toe aan een Boolean:
bool a = true; bool b = false;
Controleer de Booleaanse waarde:
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 }
Als b false is, zal a false zijn, anders blijft a zoals het was
a &= b;
Als b waar is, zal a waar zijn, anders blijft a zoals het was
a |= b;
// Als a waar is, zal het onwaar zijn en vice versa.
a = !a;
Reacties
- Die laatste zou a =! a shouldn ' moeten zijn? ~ is een beetje niet.Afhankelijk van hoe waar is gedefinieerd, kan ~ true nog steeds waar zijn.
boolean
is een niet-standaard type alias voorbool
ingesteld in de Arduino-kernbibliotheek en is daarom erg Arduino-specifiek. Zie mijn antwoord voor details.