On olemassa erityinen, ei-standardi Arduino-tietotyyppi nimeltä " looginen ".
Miten se vertaa tavalliseen C ++ -tyyppiin " bool ", ja mitkä ovat syyt käyttää yhtä tai toista?
Jos niitä on samanlainen käyttö, miksi molempia on olemassa ja kumpi niistä on suositeltava Arduino-koodissa?
Kommentit
vastaus
Vaikka muut vastaukset antavat yleisesti hyödyllistä tietoa, kirjoittajat eivät näytä lukevan kysymystä kovin huolellisesti koska he puhuvat bool -tyypistä kuin -loogisesta -tyyppi. Arduino-sovellusliittymässä boolean
on tyypin alias kohteelle bool
, kuten Arduino.h: ssa määritellään:
https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125
typedef bool boolean;
Joten voit käyttää boolean
-tyyppi samalla tavalla kuin tekisit bool
, ja mikä tahansa tavallinen C ++ -ohjelmointiviite neuvoo sinua käyttämään bool
. Tästä syystä muut vastaukset, jotka virheellisesti viittaavat bool
-ohjelmaan, ovat silti jonkin verran hyödyllisiä.
Ilmeisesti jossain vaiheessa Arduinon kansalaiset päättivät nimen boolean
olisi aloittelijaystävällisempi kuin bool
, ehkä yhdenmukainen käsittelykielen kanssa . Kuitenkin, kuten täällä keskustellaan:
https://github.com/arduino/Arduino/issues/4673
tarpeeton jotkut pitävät epätyypillisen tyypin käyttöä huonona päätöksenä, koska sen käyttö tekee koodista vähemmän siirrettävän eikä todellakaan tarjoa mitään selkeää etua bool
: een nähden. Ehdotus on teoksissa boolean
-käytön poistaminen kaikesta virallisesta Arduino-koodista ja asiakirjasta bool
Arduino-viitteessä ja jotkut haluavat jopa muodollisesti hylätä boolean
. Siksi minun on suositeltava käyttää koodissasi bool
boolean
: n sijasta.
Vastaus
Boolen muuttujatyyppi on tyyppi, jolla on vain 2 mahdollista arvoa, true
tai false
. Sisäisesti se luodaan int
(16-bittinen kokonaisluku) tai uint8_t
-tyyppi (8-bittinen kokonaisluku).
Voit määrittää ”val ues ”/ true
tai false
määritysoperaattorilla:
bool foo; foo = true; if (foo) { do_something(); }
Sisäisesti true
on 1
ja false
on 0
, ja lukuarvot voidaan korvata yhtä hyvin.
Boolen tyyppejä Arduinossa ja C ++: ssa on enimmäkseen luettavuuden vuoksi, eikä minkään erityisen tehokkuuden suhteen int
-tyyppiin nähden. Vastaa
Virallinen viite löytyy täältä
On parasta käytä aina tosi ja epätosi, älä käytä numeroita.
Seuraavassa on joitain esimerkkejä.
Määritä epätosi tosi Boolen arvolle:
bool a = true; bool b = false;
Tarkista looginen arvo:
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 }
Jos b on epätosi, a on väärä, muuten a pysyy ennallaan
a &= b;
Jos b on tosi, a on totta, muuten a pysyy ennallaan
a |= b;
// Jos a on tosi, se on väärä ja päinvastoin.
a = !a;
Kommentit
- Sen viimeisen pitäisi olla a =! a shouldn ' t se? ~ ei ole bittiä.~ Tosi voi määritelmän mukaan olla totta.
boolean
on epätyypillinen aliasbool
-asetukselle, joka on asetettu Arduino-ydinkirjastossa, ja siksi se on hyvin Arduino-spesifinen. Katso lisätietoja vastauksestani.