Der er en speciel, ikke-standard Arduino-datatype, der hedder " boolsk ".
Hvordan sammenlignes det med standard C ++ datatypen " bool ", og hvad er grundene til at bruge den ene eller den anden?
Hvis de er identiske i brug, hvorfor findes begge dele, og hvilken foretrækkes i Arduino-kode?
Kommentarer
Svar
Mens de andre svar giver generelt nyttige oplysninger, synes forfatterne ikke at have læst spørgsmålet meget omhyggeligt fordi de taler om bool typen snarere end boolesk type. I Arduino API er boolean
et typealias for bool
, som defineret 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 bruge boolean
typen ligesom du ville bool
og enhver standard C ++ programmeringsreference vil instruere dig i brugen af bool
. Af denne grund er de andre svar, der fejlagtigt henviser til bool
, stadig noget nyttigt.
Tilsyneladende på et tidspunkt tidligere besluttede Arduino-folkene navnet boolean
ville være mere nybegyndervenlig end bool
, måske for at være i overensstemmelse med behandlingssproget . Som diskuteret her:
https://github.com/arduino/Arduino/issues/4673
det unødvendige brug af en ikke-standard type betragtes nu af nogle som en dårlig beslutning, da dens anvendelse gør koden mindre bærbar og virkelig ikke giver nogen klar fordel i forhold til bool
. i værkerne for at fjerne brugen af boolean
fra al officiel Arduino-kode og dokument bool
i Arduino-referencen, og nogle ønsker endda at formelt forældes boolean
. Derfor er mit råd at bruge bool
i stedet for boolean
i din kode.
Svar
En boolsk variabeltype er en, der kun har 2 mulige værdier, true
eller false
. Internt oprettes det som et int
(16-bit heltal) eller et uint8_t
type (8-bit heltal).
Du kan tildele “val ues “af true
eller false
ved hjælp af tildelingsoperatøren:
bool foo; foo = true; if (foo) { do_something(); }
Internt er en true
en 1
og en false
er en 0
, og antallet af værdier kunne erstattes ligeligt.
Boolske typer i Arduino og C ++ findes for det meste for læsbarhed og ikke for nogen særlig effektivitet over int
type.
Svar
Den officielle reference kan findes her
Det er bedst at Brug altid sand og falsk, og brug ikke tal.
Nedenfor gives nogle eksempler
Tildel falsk resp. sand til en boolsk:
bool a = true; bool b = false;
Kontroller den boolske værdi:
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 }
Hvis b er falsk, vil a være falsk, ellers forbliver a som det var
a &= b;
Hvis b er sand, vil a være sandt, ellers forbliver a som det var
a |= b;
// Hvis a er sandt, vil det være falsk og omvendt.
a = !a;
Kommentarer
- Den sidste skal være a =! a shouldn ' t it? ~ er lidt klogt ikke.Afhængigt af hvordan sand defineres, kan sand være stadig sand.
boolean
er et ikke-standardtypealias forbool
, der er angivet i Arduino-kernebiblioteket og er derfor meget Arduino-specifikt. Se mit svar for detaljer.