Hallo Leute,
erstmals : hoffe ich habe den Beitrag diesmal in die richtige Kategorie gesetzt.
Ich hätte mal ne Verständnisfrage.
Eine einfache If Abfrage mit Oder-Abfrage funktioniert folgendermaßen:
if (Variable == 1 || Variable == 2) { // code }
hier bin ich nicht sicher: habs zwar in einem Sketch mal getestet aber bin unschlüssig:
if (Variable == 1 || 2) { // code }
was nicht geht: zumindest ging das nicht bei mir im Sketch:
if (Variable == (1||2)) { // code }
Jetzt wollte ich nur fragen ob mir jemand erklären kann warum bei den beiden letzteren Abfragen die Abfrage nicht richtig funktioniert.
Rein vom logischen her müsste das doch auch richtig sein, aber da macht der Code nicht das was er soll.
Muss ich also bei mehreren Oder Abfragen immer wie in Codeabschnitt 1 schreiben? Oder gibts Abkürzungen.
1||2 bzw (1||2) macht Du eine Oder-Verknüpfung zwischen diesen beiden Zahlen und nicht einen Vergleich zwischen der einen Zahl und der Variablen oder zwischen der anderen Zahl und der Variablen.
C erlaubt viele Kombinationen die entwerder auf ihre weise funktionieren aber nicht das machen was Du Dir erwartest bzw kann nicht erkennen daß Du einen Fehler amchst.
das ist wie ein Prüfung Variable == true oder true was zu einem Variable == true zerfällt.
kommt drauf an. es gibt auch < und > ...
Abhängig von den möglichen Werten hättest auch auf >= 1 abfragen können.
sinds mehrere Bereiche könnte man auch ein switch case setzen.
Optionen gibt es viele aus dem man schöpfen kann. Ohne Zusammenhang kaum zu beantworten.
rein vom logischen her ist es sehr unwahrscheinlich dass ein typischer Arduino Anfänger Fehler in C++ findest.
Doch, er macht was er soll. Das ist nur nicht das, was Du denkst
Auch Vergleiche und logische Operatoren sind letzendlich algebraische Ausdrücke. Und wie bei z.B. bei 'Punkt vor Strich' kommt es auch drauf an, in welcher Reihenfolge man das macht. Da gibt es in C++ schon feste Regeln für alle Operatoren, nicht nur 'Punkt' und 'Strich'. Vergleiche haben dabei eine höhere Priorität als logische Operatoren. Außerdem muss man wissen, dass bei C/C++ '0' als logisch 'false' interpretiert wird, und alles andere als 'true' . Ist das Ergebnis einen Ausdrucks 'true' wird das zu '1' gesetzt.
Also dein Ausdruck
Erst kommt der Vergleich dran. Das Ergebnis hängt natürlich davon ab, ob die Variable 1 ist oder nicht - als entweder 'true' oder 'false' ( = 1 oder 0 ). Dann kommt das logische 'oder'. Da alles was nicht 0 ist, als 'true' interpretiert wird, gilt die '2' also als 'true'. Damit wird der gesamte Ausdruck immer 'true', egal was bei dem Vergleich rausgekommen ist, denn 'false' OR 'true' ist genauso 'true' wie 'true' OR 'true'.
Deinen 2. Fall kannst Du jetzt sicher selbst 'ausrechnen'.
P.S. Es ist eigentlich nichts anderes, als wenn Du Variable * 3 + 4
oder Variabel * ( 3 + 4 )
ausrechnest.
Sie schickt ihren Mann, einen Mathematiker, einkaufen:
"Wir brauchen ein Brot. Wenn sie Eier haben, bring sechs mit".
Er kommt mit 6 Broten zurück und erklärt: "Sie hatten Eier".