Go Down

Topic: Boolean invertieren (Read 1 time) previous topic - next topic

hk007

Hi,

jetzt kommt wahrscheinlich die dumme Frage des Tages:
Gibt es einen Befehl um eine boolean zu invertieren? Also aus "true" "false" machen und umgekehrt?
Also mit ifs und so krieg ich das schon hin. Aber das sieht voll unelegant aus.
Habs schon mit "~" probiert, aber das klappt nicht. Wohl, weil eine Boolean bei C nicht nur ein Bit ist. (Hab ich hier mal gehört)

Irgendwie steh ich auf dem Schlauch und find da nichts besseres.

gruß/hk007
Arduino 1.0.5 | Arduino UNO & MEGA | Arduino 1.54r2 mit DUE

mkl0815

Code: [Select]

boolean state = false;
state= !state;

Naja in C (nicht Cpp oder C#) ist der Boolean nichtmal "out of the box" enthalten. Ich weiß nicht genau was du vor hast, aber du könntest Beispielsweise mit einer enum arbeiten und dann "WAHR" den Wert 0 und "FALSCH" den Wert 1 zuweisen.

hk007

#3
Oct 19, 2012, 08:43 pm Last Edit: Oct 19, 2012, 08:45 pm by hk007 Reason: 1

Code: [Select]

boolean state = false;
state= !state;



Hi,
tja .... funzt. Danke. Doch so einfach :smiley-eek-blue:

Wobei ich mal zu meiner Ehrenrettung bemerken darf, daß ich mir die Referenz vor der Frage eigentlich genau durchgelesen habe. Da bin ich auch auf das "!" gestossen.
Aber dabei stand folgendes:
Quote
Boolean Operators
These can be used inside the condition of an if statement.
if (!x) {
 // ...
}

Heisst doch, daß man das nur in der Abfrage verwenden darf und nicht in einer Zuweisung.
Arduino 1.0.5 | Arduino UNO & MEGA | Arduino 1.54r2 mit DUE

BerndJM

Hi,
ich würde das eher so interpretieren:

... daß man das nur in der Abfrage verwenden kann darf und nicht in einer Zuweisung.

Grüßle Bernd
Theoretisch gibt es keinen Unterschied zwischen Theorie und Praxis ...

uwefed

#5
Oct 20, 2012, 01:03 am Last Edit: Oct 20, 2012, 01:05 am by uwefed Reason: 1

Naja in C (nicht Cpp oder C#) ist der Boolean nichtmal "out of the box" enthalten. Ich weiß nicht genau was du vor hast, aber du könntest Beispielsweise mit einer enum arbeiten und dann "WAHR" den Wert 0 und "FALSCH" den Wert 1 zuweisen.

TRUE und 1 sind das gleiche und auch HIGH.  Übrigens in einer Bedingung auch jeder positive Wert verschieden von 0.
Ebenso ist FALSE, 0 und LOW das gleiche.

Beispiel:

if (A) {...}
ist wahr wenn A =1, oder A=4 ecc ist.
ist falsch wenn A=0 ist.
if (!A){...}
ist falsch wenn A =1, oder A=4 ecc ist.
ist wahr wenn A=0 ist.

Die Negation kann man überall machen; im Bedingungen oder Zuweisungen.
Sogar als Verschieden oder Ungleichzeichen: A!=B (A nicht gleich B). != kann man auch als <> schreiben.

Das ~ negiert bitweise. Das heist jedes Bit eines Bytes einzeln.
Das heißt es invertiert die Zahl B01010101 in B10101010. Das B ist in diesem Fall nur die Darstellungsart der Zahl, nicht die interne Verarbeitung im Controller. Der Controller rechnet immer Binär, die Darstellung erfolgt für den Menschen Dezimal, Binär, Hexadezimal, oktal, als Zeichen oder als Fließkomazahl, je nach Formatierungsanweisung:  siehe http://arduino.cc/en/Serial/Print

Eine Binärzahl ist als eine 1Byte Zahl definiert.

In der Elektronik wird die Negation auch als Strich über der Bezeichnung eines Pins geschrieben.

Grüße Uwe

Go Up