Istnieje specjalny, niestandardowy typ danych Arduino o nazwie " boolean ".
Jak wypada to w porównaniu ze standardowym typem danych C ++ " bool " i jakie są powody używania jednego lub drugiego?
Jeśli są identyczne w użyciu, dlaczego oba istnieją i który jest preferowany w kodzie Arduino?
Komentarze
Odpowiedź
Podczas gdy inne odpowiedzi zawierają ogólnie przydatne informacje, wydaje się, że autorzy nie przeczytali zbyt uważnie pytania ponieważ mówią o typie bool , a nie boolowskim typ. W interfejsie Arduino API boolean
jest aliasem typu dla bool
, zgodnie z definicją w Arduino.h:
https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125
typedef bool boolean;
Możesz więc użyć boolean
tak samo, jak bool
, a wszelkie standardowe odwołania do programowania w C ++ poinstruują Cię, jak używać bool
. Z tego powodu inne odpowiedzi, które omyłkowo odnoszą się do bool
, są nadal dość przydatne.
Najwyraźniej kiedyś ludzie Arduino zdecydowali się na nazwę boolean
byłoby bardziej przyjazne dla początkujących niż bool
, być może zgodne z językiem przetwarzania . Jednak, jak omówiono tutaj:
https://github.com/arduino/Arduino/issues/4673
niepotrzebne użycie niestandardowego typu jest teraz uważane przez niektórych za złą decyzję, ponieważ jego użycie sprawia, że kod jest mniej przenośny i naprawdę nie zapewnia żadnej wyraźnej przewagi nad bool
. Propozycja jest w pracach nad usunięciem boolean
z całego oficjalnego kodu i dokumentu Arduino bool
w dokumentacji Arduino, a niektórzy nawet chcą formalnie wycofać boolean
. Dlatego radzę użyć w kodzie bool
zamiast boolean
.
Odpowiedź
Typ zmiennej logicznej to taki, który ma tylko 2 możliwe wartości, true
lub false
. Wewnętrznie jest tworzony jako int
(16-bitowa liczba całkowita) lub uint8_t
typ (8-bitowa liczba całkowita).
Możesz przypisać parametr „val ues „z true
lub false
przy użyciu operatora przypisania:
bool foo; foo = true; if (foo) { do_something(); }
Wewnętrznie true
to 1
, a false
to 0
, a wartości liczbowe mogą być równo podstawione.
Typy logiczne w Arduino i C ++ istnieją głównie ze względu na czytelność, a nie dla jakiejś szczególnej wydajności nad typem int
.
Odpowiedź
Oficjalne odniesienie można znaleźć tutaj
Najlepiej zawsze używaj prawdy i fałszu i nie używaj liczb.
Poniżej podano kilka przykładów
Przypisz fałsz lub prawda do wartości logicznej:
bool a = true; bool b = false;
Sprawdź wartość logiczną:
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 }
Jeśli b jest fałszywe, a będzie fałszywe, w przeciwnym razie a pozostanie takie, jakie było
a &= b;
Jeśli b jest prawdziwe, a będzie prawdziwe, w przeciwnym razie a pozostanie takie, jakie było
a |= b;
// Jeśli a jest prawdziwe, będzie fałszywe i odwrotnie.
a = !a;
Komentarze
- Ten ostatni powinien być a =! a powinien nie ' t? ~ jest bitowe nie.W zależności od tego, jak zdefiniowano prawdę, ~ prawda może nadal być prawdą.
boolean
to niestandardowy alias typu dlabool
ustawiony w podstawowej bibliotece Arduino i dlatego jest bardzo specyficzny dla Arduino. Zobacz moją odpowiedź, aby poznać szczegóły.