Van egy speciális, nem szabványos Arduino adattípus, az úgynevezett " logikai ".
Hogyan viszonyul a standard C ++ adattípushoz " bool ", és mi az oka az egyik vagy másik használatának?
Ha azonosak a használatukban, miért léteznek mindkettő, és melyiket részesítik előnyben az Arduino kódban? / p>
Megjegyzések
Válasz
Míg a többi válasz általában hasznos információt nyújt, úgy tűnik, a szerzők nem nagyon gondosan olvasták el a kérdést mert a bool típusról beszélnek, nem pedig a logikai típus. Az Arduino API-ban a boolean
a bool
típus álneve, az Arduino.h-ban meghatározottak szerint:
https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125
typedef bool boolean;
Így használhatja a boolean
típus ugyanúgy, mint te bool
, és bármely szokásos C ++ programozási hivatkozás megtanítja a . Ezért a többi válasz, amely tévesen bool
-re utal, még mindig némileg hasznosak.
Nyilvánvalóan a múlt egy bizonyos pontján az arduinoiak úgy döntöttek, hogy a boolean
kezdőbarátabb lenne, mint a bool
, esetleg összhangban állna a feldolgozási nyelvvel . Azonban, amint itt tárgyaltuk:
https://github.com/arduino/Arduino/issues/4673
a felesleges a nem szabványos típus használatát egyesek rossz döntésnek tekintik, mivel használata kevésbé hordozhatóvá teszi a kódot, és valójában nem nyújt egyértelmű előnyt a bool
hez képest. azon munkálatokban, amelyek célja az boolean
használatának eltávolítása az összes hivatalos Arduino kódból és bool
dokumentumból az Arduino hivatkozásban, és néhányan hivatalosan is el akarják mondani boolean
. Ezért azt tanácsolom, hogy bool
-t használja a kódjában a boolean
helyett.
Válasz
A logikai változótípus az, amelynek csak 2 lehetséges értéke van, true
vagy false
. Belsőleg int
(16 bites egész szám) vagy uint8_t
típus (8 bites egész szám).
Hozzárendelheti a “val ues “/ true
vagy false
a hozzárendelés operátor használatával:
bool foo; foo = true; if (foo) { do_something(); }
Belsőleg a true
egy 1
, a false
pedig 0
, és a számértékek egyaránt helyettesíthetők.
Az Arduino és a C ++ logikai típusai többnyire az olvashatóság kedvéért léteznek, és nem a int
típushoz képest különösebb hatékonyság érdekében.
Válasz
A hivatalos hivatkozás megtalálható itt
A legjobb mindig használjon igaz és hamis értékeket, és ne számokat.
Az alábbiakban néhány példa szerepel
Hamis vagy igaz hozzárendelése logikai értékhez:
bool a = true; bool b = false;
Ellenőrizze a logikai értéket:
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 }
Ha b értéke hamis, akkor a értéke hamis lesz, különben egy olyan marad, mint volt
a &= b;
Ha b igaz, akkor az a igaz lesz, különben a marad, mint volt
a |= b;
// Ha a igaz, akkor hamis lesz, és fordítva.
a = !a;
Megjegyzések
- Ez az utolsó legyen a =! a shouldn ' t it? ~ bitenként nem.Attól függően, hogy mennyire igaz az igaz, a ~ igaz még mindig igaz lehet.
boolean
egy nem standard típusú álnév abool
számára, amely az Arduino magkönyvtárában van beállítva, és ezért nagyon Arduino-specifikus. A részletekért lásd a válaszomat.