Speciális Arduino “ logikai ” adattípus használata a szokásos “ bool ” adattípus

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

  • Ez egy alapvető programozási kérdés, nem csak az Arduino-ra vonatkozik. A végleges C ++ könyv útmutató és lista . Vagy Google
  • Üdvözöljük az Arduino Stack Exchange szolgáltatásban. Kérjük, látogasson el a arduino.stackexchange.com/Tour oldalra, hogy a legtöbbet hozza ki erről a webhelyről. A Boolean jelentése bináris, mint a true / false. Végezzen Google-keresést az " Arduino adattípusok " segítségével, hogy megismerje.
  • Nem értek egyet ezzel. nem Arduino-kérdés. A boolean egy nem standard típusú álnév a bool 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.
  • Valaminek átnevezése nem azt jelenti, hogy ' ez akkor ', majd az Arduinóra jellemző.

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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük