Det finns en speciell, icke-standardiserad Arduino-datatyp som heter " boolean ".
Hur jämför det sig med standard C ++ datatyp " bool ", och vad är skälen till att använda den ena eller den andra?
Om de är identiska i varför, varför finns båda och vilken föredras i Arduino-kod?
Kommentarer
Svar
Medan de andra svaren ger generellt användbar information verkar författarna inte ha läst frågan särskilt noggrant eftersom de talar om bool typ snarare än boolean typ. I Arduino API är boolean
ett typalias för bool
, enligt definitionen i Arduino.h:
https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125
typedef bool boolean;
Så du kan använda boolean
typ precis som du skulle bool
och alla standard C ++ programmeringsreferenser kommer att instruera dig att använda bool
. Av denna anledning är de andra svaren som felaktigt hänvisar till bool
fortfarande något användbara.
Tydligen någon gång i det förflutna bestämde Arduino-folket namnet boolean
skulle vara mer nybörjarvänligt än bool
, kanske för att vara överensstämmer med bearbetningsspråket . Men som diskuteras här:
https://github.com/arduino/Arduino/issues/4673
det onödiga användning av en icke-standardtyp anses nu av vissa vara ett dåligt beslut eftersom dess användning gör koden mindre bärbar och verkligen inte ger någon klar fördel jämfört med bool
. i arbetet för att ta bort användningen av boolean
från all officiell Arduino-kod och dokument bool
i Arduino-referensen och vissa vill till och med formellt upphäva boolean
. Därför är mitt råd att använda bool
istället för boolean
i din kod.
Svar
En boolesk variabel typ är en som bara har två möjliga värden, true
eller false
. Internt skapas det som ett int
(16-bitars heltal) eller ett uint8_t
typ (8-bitars heltal).
Du kan tilldela ”val ues ”av true
eller false
med tilldelningsoperatören:
bool foo; foo = true; if (foo) { do_something(); }
Internt är en true
en 1
och en false
är en 0
, och antalet värden kan ersättas lika.
Booleska typer i Arduino och C ++ finns mestadels för läsbarhet och inte för någon speciell effektivitet över int
-typ.
Svar
Den officiella referensen finns här
Det är bäst att använd alltid sant och falskt och använd inte siffror.
Nedan ges några exempel
Tilldela falskt resp sant till en boolean:
bool a = true; bool b = false;
Kontrollera det booleska värdet:
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 }
Om b är falskt, kommer a att vara falskt, annars förblir a som det var
a &= b;
Om b är sant kommer a att vara sant, annars kommer en att förbli som det var
a |= b;
// Om a är sant kommer det att vara falskt och tvärtom.
a = !a;
Kommentarer
- Det sista borde vara a =! a borde ' t det? ~ är lite klokt inte.Beroende på hur sant definieras ~ kan sant fortfarande vara sant.
boolean
är ett icke-standardtypalias förbool
i Arduino-kärnbiblioteket och är därför mycket Arduino-specifikt. Se mitt svar för mer information.