Forum: Mikrocontroller und Digitale Elektronik Ist >-1 in Der Arduino Sprache eine Investierung?


von Jan R. (Gast)


Lesenswert?

Hallo,
1
 if(HTTP_req.indexOf("Var") > -1)


was bedeutet dieses-1 dass kann doch nur eine Inv sein, als wenn True 
rauskommt false und umgekehrt oder.

von Martin S. (tungl)


Lesenswert?

Mit den kargen Informationen wuerde ich sagen: indexOf gibt die Position 
der uebergebenen Zeichenkette zurueck. Wird die Zeichenkette nicht 
gefunden, gibt die Funktion -1 als Rueckgabewert. Es wird also nur 
ueberprueft, ob "Var" irgendwo drin vorhanden ist.

von Patrick (Gast)


Lesenswert?

Jan R. schrieb:
> Ist >-1 in Der Arduino Sprache eine Investierung?

Also, ich investiere aktuell in Sachwerte und einen IMHO gut verteilten 
Fonds. Keine Ahnung, wie man das in Arduino beschreibt.

Jan R. schrieb:
> if(HTTP_req.indexOf("Var") > -1)

> was bedeutet dieses-1

Naja, steht doch da: Wenn HTTP.xxx größer als minus Eins ist, dann ...

> dass kann doch nur eine Inv sein, als wenn True
> rauskommt false und umgekehrt oder.

Sorry, aber Du brauchst dringend ein gutes C-Buch. Kaufe Dir 
schnellstmöglich das hier regelmäßig empfohlene K&R.

von Amateur (Gast)


Lesenswert?

Wenn Dein Compiler nicht die Fassung verliert, ist:

>>if(HTTP_req.indexOf("Var") > -1)

eine 08/15 Abfrage. Wobei:

HTTP_req.indexOf("Var")

eine Integer Zahl liefert, was auch immer das sein soll und diese wird 
mit:

-1

verglichen. --- Also ganz normales C.

von Karl H. (kbuchegg)


Lesenswert?

In solchen Fällen empfiehlt es sich, ganz einfach in der Doku der Klasse 
nachzusehen, von der HTTP_req ein Objekt ist, was in der Beschreibung 
der Methode indexOf steht, welche Werte diese Memberfunktion 
zurückliefert und ob es da spezielle Werte wie zb -1 gibt, die irgendwas 
spezielles bedeuten.

Eigentlich ganz einfach, wie man solche Dinge rauskriegt.

> was bedeutet dieses-1 dass kann doch nur eine Inv sein,
> als wenn True rauskommt false und umgekehrt oder.

Nein, falsch.
-1 ist -1.

von Amateur (Gast)


Lesenswert?

Man sollte bool'sche Vergleiche nicht mit "echten" Integer vergleichen 
mischen. Früher war das Resultat eines Vergleiches eine Integer Zahl. 
Normalerweise aber 0 (false) oder 1 (true). Von einem definierten -1 
habe ich noch nie gehört.
Es gab dann so Krücken wie:
if(integervariable1-integervariable2)
die auch dazu beigetragen haben das Verständnis für C zu fördern.

von Peter II (Gast)


Lesenswert?

Amateur schrieb:
> Man sollte bool'sche Vergleiche nicht mit "echten" Integer vergleichen
> mischen.

wo wird denn hier was vermischt? Das ist ein ganz normaler vergleich
mit -1 da könnte auch 42 oder 3 stehen.

von Peter (Gast)


Lesenswert?

Man Leute, das ist ja schlimmer als Kindergarten hier - ein noch weniger 
Ahnung als der nächste.

Die -1 ist der Standard Rückgabe einer jeden vernüftigen PC-Funktion für 
einen ungültigen Wert. Die 0 ist nunmal ein korrekter Wert und ab da 
passt alles.

von Jan R. (Gast)


Lesenswert?

misst ich meine natürlich ^nicht >

von Karl H. (kbuchegg)


Lesenswert?

Jan R. schrieb:
> misst ich meine natürlich ^nicht >

?
Wo kommt da jetzt ein XOR ins Spiel?

von Marcus W. (marcusaw)


Lesenswert?

^^

das ist aber schon sehr "geekiger" humor...

von Jan R. (Gast)


Lesenswert?

Ohje ich glaube ich muss euch mal sagen, wie ich darauf komme, dass das 
nicht bedeuten könnte.
1
digitalWirite(x, x^-1);


Wenn X= False oder Low war, wurde es im Nächten Programmdurchlauf oder 
Interrupt True oder High.

Ich  habe mich einwenig mit Arduinno Webservern beschäftigt für 
Hausautomatisierung und so. In einem Beispiel habe ich dann genau diesen 
Befehl wieder gefunden. Konnte mir aber nicht vorstellen, dass wenn ich 
in eine Checkbox einen Haken setze diese Dann einen False ausgibt.

Deshalb frage ich halt nochmal ob ich mich damals bei dem ^-1 getäuscht 
habe denn eigentlich kenne ich ein Not in C/C++ nur als ! vor der 
Variable.

von Karl H. (kbuchegg)


Lesenswert?

Jan R. schrieb:
> Ohje ich glaube ich muss euch mal sagen, wie ich darauf komme, dass das
> nicht bedeuten könnte.
>
1
digitalWirite(x, x^-1);
>

es gibt hier keinen Zusammenhang

Anstatt rumzuraten solltest du lieber die binären Operationen 
untersuchen und was es mit dem 2-er Komplement auf sich hat. Hinweis: -1 
ist in einer 2-er Komplementdarstellung ein int mit lauter 1 Bits. Also 
0xFFFF

Wendet man 0xFFFF XOR-mässig auf ein beliebiges Bitmuster an, dann 
werden alle Bits geflippt (weil in 0xFFFF ja alle Bits 1 sind)


Mit einem NICHT, wie du es da oben in einem Vergleich postulierst, hat 
das alles nicht das geringste zu tun.

> Deshalb frage ich halt nochmal ob ich mich damals bei dem ^-1 getäuscht
> habe denn eigentlich kenne ich ein Not in C/C++ nur als ! vor der
> Variable.


0x0000   ^ 0xFFFF   -> 0xFFFF
0xFFFF   ^ 0xFFFF   -> 0x0000

die XOR Operation dreht die Bits um.
Und: In C gilt: ein Ergebnis von 0 ist logisch falsch. Ein Ergebnis 
ungleich 0 gilt als logisch wahr. 0x0000 ist eine glatte 0 und daher 
gilt dieses Ergebnis als logisch falsch. Ein Ergebnis von 0xFFFF ist 
ungleich 0 und gilt daher als logisch wahr.

C-Buch!


Binäre Operationen:
& (und)
| (oder)
^ (xor)
~ (not)

Logische Operationen
&& (und)
|| (oder)
!  (nicht)


Binäre Operationen verknüpfen ihre Argumente bitweise und liefern wieder 
ein Bitmuster. Logische Operationen verknüpfen wWahrheitswerte und 
liefern wieder einen Wahrheitswert (mit dem Zusatz: 0 ist logisch 
falsch, ungleich 0 ist logisch wahr; der Operator liefert 0 für falsch 
und 1 für wahr)


Und nein: ein xor dreht Bits um. Das bedeutet aber nicht 
notwendigerwiese das aus true false wird oder umgekehrt.

Bsp:  5 ^ -1
1
Das Bitmuster für 5 (8-Bit)      0000 0101
2
Das Bitmuster für -1             1111 1111
3
                      XOR      ------------
4
                                 1111 1010
1111 1010 ist im 2-er Komplement eine negative Zahl. Nämlich welche?
1
    1111 1010       Ausgangspunkt
2
    0000 0101       alle Bits umdrehen
3
    0000 0110       +1
0000 0110 ist das Bitmuster für 6. Also ist 1111 1010 das Bitmuster für 
-6.
1
5 ^ -1  ->  -6
5 ist ungleich 0 und hat daher einen Wahrheitswert von TRUE
-6 ist ungleich 0 und hat daher einen Wahrheitswert von TRUE

Das Ergebnis müsste aber FALSE sein, damit das ein ! (nicht) sein kann. 
Daher
1
  x ^ -1    <!=>    !x
(Selbst dann, wenn es einen bestimmten Zahlenwert für x gibt, für den 
die Operation tatsächlich einer Nicht-Operation gleichkommt. Wir reden 
hier aber vom allgemeinen Fall, der für alle Zahlenwerte und nicht 
einfach nur 'zufällig' gilt)

Moral: schmeiss nicht binäre und logische Operationen durcheinander. Das 
sind 2 verschiedene Paar Schuhe.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.