Es gibt einen speziellen, nicht standardmäßigen Arduino-Datentyp namens " boolean ".
Wie wird es mit dem Standard-C ++ – Datentyp verglichen? " bool " und was sind die Gründe für die Verwendung des einen oder anderen?
Wenn sie identisch verwendet werden, warum existieren beide und welche wird im Arduino-Code bevorzugt?
Kommentare
- Dies ist eine grundlegende Programmierfrage, die nicht spezifisch für Arduino ist. Das endgültige C ++ – Buchhandbuch und die Liste . Oder Google
- Willkommen bei Arduino Stack Exchange. Bitte nehmen Sie an der Tour unter arduino.stackexchange.com/Tour teil, um diese Website optimal zu nutzen. Boolean bedeutet binär, wie wahr / falsch. Führen Sie eine Google-Suche nach " Arduino-Datentypen " durch, um dies herauszufinden.
- Ich bin damit nicht einverstanden keine Arduino-spezifische Frage.
boolean
ist ein nicht standardmäßiger Typalias fürbool
, der in der Arduino-Kernbibliothek festgelegt ist und daher sehr Arduino-spezifisch ist. Einzelheiten finden Sie in meiner Antwort. - Das Umbenennen von etwas bedeutet nicht, dass ' nicht bedeutet, dass ' dann spezifisch für Arduino ist.
Antwort
Während die anderen Antworten allgemein nützliche Informationen enthalten, scheinen die Autoren die Frage nicht sehr sorgfältig gelesen zu haben weil sie über den Typ bool sprechen und nicht über den Typ boolean Typ. In der Arduino-API ist boolean
ein Typalias für bool
, wie in Arduino.h definiert:
https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125
typedef bool boolean;
Sie können also verwenden Der Typ boolean
wie bool
und jede Standard-C ++ – Programmierreferenz weisen Sie in die Verwendung von . Aus diesem Grund sind die anderen Antworten, die sich fälschlicherweise auf bool
beziehen, immer noch etwas nützlich.
Anscheinend haben die Arduino-Leute irgendwann in der Vergangenheit den Namen boolean
wäre anfängerfreundlicher als bool
, möglicherweise konsistent mit der Verarbeitungssprache . Wie hier beschrieben:
https://github.com/arduino/Arduino/issues/4673
das Unnötige Die Verwendung eines nicht standardmäßigen Typs wird von einigen als schlechte Entscheidung angesehen, da seine Verwendung den Code weniger portabel macht und keinen klaren Vorteil gegenüber bool
bietet. Ein Vorschlag ist in den Arbeiten, um die Verwendung von boolean
aus allen offiziellen Arduino-Codes und -Dokumenten bool
in der Arduino-Referenz zu entfernen, und einige möchten sogar formell ablehnen boolean
. Daher empfehle ich, bool
anstelle von boolean
in Ihrem Code zu verwenden.
Antwort
Ein boolescher Variablentyp hat nur zwei mögliche Werte: true
oder false
. Intern wird es als int
(16-Bit-Ganzzahl) oder uint8_t
Typ (8-Bit-Ganzzahl).
Sie können den Wert „val“ zuweisen ues „von true
oder false
unter Verwendung des Zuweisungsoperators:
bool foo; foo = true; if (foo) { do_something(); }
Intern ist eine true
eine 1
und eine false
eine 0
, und die Zahlenwerte könnten gleichermaßen ersetzt werden.
Boolesche Typen in Arduino und C ++ existieren hauptsächlich aus Gründen der Lesbarkeit und nicht für eine bestimmte Effizienz gegenüber dem int
-Typ.
Antwort
Die offizielle Referenz finden Sie hier
Am besten Verwenden Sie immer true und false und keine Zahlen.
Nachfolgend sind einige Beispiele aufgeführt.
Weisen Sie einem Booleschen Wert false bzw. true zu:
bool a = true; bool b = false;
Überprüfen Sie den Booleschen Wert:
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 }
Wenn b falsch ist, ist a falsch, andernfalls bleibt a so, wie es war
a &= b;
Wenn b wahr ist, ist a wahr, andernfalls bleibt a so, wie es war
a |= b;
// Wenn a wahr ist, ist es falsch und umgekehrt.
a = !a;
Kommentare
- Das letzte sollte a =! a sein, nicht ' nicht wahr? ~ ist ein bisschen nicht.Abhängig davon, wie wahr definiert ist, kann ~ wahr immer noch wahr sein.