mikrocontroller.net

Forum: Compiler & IDEs expression immer TRUE?


Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

ist folgende expression (bTest ) immer true ?

char c;
bool bTest = (c != 'X' || c != 'Y' );

danke

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja. (Solange da keine ISR c mitten in der Zeile verändert)

Der Klammerausdruck wird nur dann falsch, wenn beide Vergleiche falsch 
sind. Da c aber niemals gleichzeitig den Wert 'X' und 'Y' haben kann, 
kommt immer wahr raus.

Oliver

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c wird natürlcih im programm verlauf gesetzt

char c;
...
bool bTest = (c != 'X' || c != 'Y' );

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c ist natürlich immer entweder nicht X oder nicht Y. Wie Oliver schon 
sagte: Der einzige Fall, in dem die Bedingung nicht erfüllt wäre, kann 
nie auftreten, da er bedeuten würde, dass c gleichzeitig X und Y sein 
müsste...

Autor: gert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
passt

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. wrote:

> c ist natürlich immer entweder nicht X oder nicht Y.

Das nun ist falsch, denn es kann sowohl nicht X als auch nicht Y sein.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Kaiser wrote:
> Johannes M. wrote:
>
>> c ist natürlich immer entweder nicht X oder nicht Y.
>
> Das nun ist falsch, denn es kann sowohl nicht X als auch nicht Y sein.
Das spielt doch keine Rolle. Es geht doch darum, dass immer mindestens 
einer der beiden Vergleiche wahr ist. Dass auch beide gleichzeitig 
wahr sein können, ist schon klar... Hätte vielleicht schreiben sollen "c 
ist natürlich immer entweder nicht X oder nicht Y oder nicht X und 
nicht Y."

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. wrote:

> Das spielt doch keine Rolle.

Tut es wirklich nicht. Aber wenn man sich schon mit Logik rumschlägt, 
dann lieber logisch als unlogisch ;-). Ohne das "entweder" wäre es 
korrekt gewesen.

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.