Używanie specjalnego Arduino “ boolean ” Typ danych zamiast standardowego “ bool ” typ danych

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

  • To jest podstawowe pytanie programistyczne, nie specyficzne dla Arduino. The Definitive C ++ Book Guide and List . Lub Google
  • Witamy w Arduino Stack Exchange. Zapraszamy na wycieczkę pod adresem arduino.stackexchange.com/Tour , aby w pełni wykorzystać tę witrynę. Boolean oznacza binarny, jak prawda / fałsz. Poszukaj w Google " typów danych Arduino ", aby się tego dowiedzieć.
  • Nie zgadzam się, że to jest nie jest to pytanie specyficzne dla Arduino. boolean to niestandardowy alias typu dla bool ustawiony w podstawowej bibliotece Arduino i dlatego jest bardzo specyficzny dla Arduino. Zobacz moją odpowiedź, aby poznać szczegóły.
  • Zmiana nazwy czegoś nie ' nie oznacza, że ' jest wtedy specyficzna dla Arduino.

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ą.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *