mikrocontroller.net

Forum: Compiler & IDEs Zahlenbereich wählen


Autor: Unitled (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
der GCC kompiliert zwar, aber der Vergleich funktioniert leider nicht:
if (0 < Messwert > 210)


Wie kann ich auf geschicktere Weise einen Zahlenbereich wählen?


mfg unitled

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C-Buch besorgen
C-Buch lesen
C-Buch verstehen

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"geschickter" :
if ((0 < Messwert) && (Messwert > 210))

Oliver

Autor: Unitled (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielleicht eine idee, aber ich weiß immerhin warum der vergleich nicht 
funktioniert:

als erste vergleicht der compiler links und mitte und dann mitte und 
rechts und somit ist der Vergleich immer falsch.

Autor: Unitled (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke oliver

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso achtet heutzutage eigentlich niemand mehr auf die 
Compiler-Warnungen?
> test.c:47: warning: comparisons like X<=Y<=Z do not have their mathematical
> meaning

Autor: Niklas Gürtler (erlkoenig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ein Wert größer als 210 ist, muss er auch größer als 0 sein.

Autor: Unitled (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ne uwe deswegen habe ich ja gerade gefragt^^

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unitled schrieb:

> als erste vergleicht der compiler links und mitte und dann mitte und
> rechts und somit ist der Vergleich immer falsch.

genau das passiert nicht.

In C ist fast alles ein Ausdruck. Auch das Ergebnis eines Vergleichs 
oder einer Zuweisung.

In

if (0 < Messwert > 210)

wird 0 und Messwert miteinander verlgichen. Das liefert ein Ergebnis, 
nämlich 0 oder 1, je nachdem ob der Vergleich zutrifft oder nicht.
Dieses Ergebnis geht dann in den zweiten Vergleich: > 210
Da weder 0 noch 1 jemals größer als 210 sein wird, ist damit der 
komplette Ausdruck immer falsch.

Wenn man deinen Vergleich etwas ausführlicher auseinandernimmt, dann 
hast du da oben geschrieben:

  Vergleich1 = ( 0 < Messwert );
  Vergleich2 = ( Vergleich1 > 210 );
  if( Vergleich2 )

Was du wissen willst:
Ist es wahr, dass Messwert größer 0 ist UND Messwert kleiner als 210 ist

  if( Messwert > 0  && Messwert < 210 )

Autor: Unitled (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@kbuchegg
Danke dir, ich sollte mir mal ne Liste mit logischen Verknüpfungen 
machen.

mfg Unitled

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ich sollte mir mal ne Liste mit logischen Verknüpfungen
>machen.

>C-Buch besorgen
>C-Buch lesen
>C-Buch verstehen

Oliver

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unitled schrieb:
> @kbuchegg
> Danke dir, ich sollte mir mal ne Liste mit logischen Verknüpfungen
> machen.

Wozu?
Es gibt nur 2: UND und ODER

Autor: Peter S. (psavr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wozu?
>Es gibt nur 2: UND und ODER

Falsch, es gibt auch noch XOR!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter S. schrieb:
>>Wozu?
>>Es gibt nur 2: UND und ODER
>
> Falsch, es gibt auch noch XOR!

Aber nicht als dezidierte logische Verknüfung.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
doch: !=
(falls links und rechts logische Ausdrücke stehen, die jeweils nur 0 
oder 1 liefern)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was Karl heinz Buchegger wohl meinte ist, dass es zwei elemtare logische 
Verknuepfungen gibt, naemlich : UND, ODER

Mit Hilfe dieser und der Negation kann man nun alle anderen logischen 
Verknuepfungen darstellen. Dass es fuer einige gebraeuchliche 
(nichtelementare) auch noch extra Abkuerzungen (z. Bsp. XOR) aendert 
dabei nichts an der grundsaetzlichen Aussage. ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.