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ą.
booleanto niestandardowy alias typu dlaboolustawiony w podstawowej bibliotece Arduino i dlatego jest bardzo specyficzny dla Arduino. Zobacz moją odpowiedź, aby poznać szczegóły.