Met behulp van speciaal Arduino “ boolean ” gegevenstype in plaats van standaard “ bool ” gegevenstype

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

  • Dit is een basisvraag over programmeren, niet specifiek voor Arduino. De definitieve C ++ – boekgids en lijst . Of Google
  • Welkom bij Arduino Stack Exchange. Volg de rondleiding op arduino.stackexchange.com/Tour om het meeste uit deze site te halen. Boolean betekent binair, zoals true / false. Voer een Google-zoekopdracht uit op " Arduino-gegevenstypen " om er meer over te weten te komen.
  • Ik ben het er niet mee eens dat dit geen Arduino-specifieke vraag. boolean is een niet-standaard type alias voor bool ingesteld in de Arduino-kernbibliotheek en is daarom erg Arduino-specifiek. Zie mijn antwoord voor details.
  • Iets hernoemen betekent niet ' t betekent dat het ' is en dan specifiek voor Arduino.

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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *