mikrocontroller.net

Forum: Compiler & IDEs C Verzweigung + Or korrekt?


Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
es geht um folgenden Code:
if (x != (5 | 12))

ist das korrekt? Das Porgramm soll den Teil der kommt nur ausführen, 
wenn x ≠ 5 oder x ≠ 12 is. Also für alle x ≠ 5,12

Autor: Grunz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein.

if ( (x!=5) || (x!=12) )

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist nicht korrekt so. Du hast eine falsche Vorstellung davon, was 
logische Verknüpfungen tun. Hier wird zunächst 5 und 12 per logischem 
ODER bitweise miteinander verknüpft. Das Ergebnis ist dabei 13. Damit 
wird x dann verglichen.

> Das Porgramm soll den Teil der kommt nur ausführen, wenn x ≠ 5 oder x ≠
> 12 is. Also für alle x ≠ 5,12.

Du meinst, wenn wenn x ≠ 5 und x ≠ 12 ist.

Du mußt es schreiben als:
if (x != 5 && x != 12)

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie denn nun ^^also es soll ausgeführt werden wenn x ≠ 5 und auserdem 
nicht wenn x ≠ 12 beides zugleich kommt nicht vor.

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

Bewertung
0 lesenswert
nicht lesenswert
Nö, das geht nicht. "5 | 12" ist ein konstanter Wert, und zwar in 
Binärschreibweise
    00000101
  | 00001100
  ----------
  = 00001101 = Dh bzw. 13d
Es wird oben also überprüft, ob x ungleich 13 ist. Da kannste aber auch 
gleich
if(x != 13)
{}
schreiben. Außerdem dürfte eine binäre VerODERung für Deine Zwecke 
sowieso ungeeignet sein. Was Du brauchst ist ein logisches UND (es 
soll ja weder 5 noch 12 sein), und das heiß in C "&&".

Du musst in dem Fall zwei getrennte Abfragen machen, also z.B.
if((x != 5) && (x != 12))
{}

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok danke da hab ich mich ja total vertan!

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

Bewertung
0 lesenswert
nicht lesenswert
Mario wrote:
> wie denn nun ^^also es soll ausgeführt werden wenn x ≠ 5 und auserdem
> nicht wenn x ≠ 12 beides zugleich kommt nicht vor.
Eben, es soll ausgeführt werden, wenn x nicht 5 UND nicht 12 ist...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mario wrote:
> es soll ausgeführt werden wenn x ≠ 5 und auserdem
> nicht wenn x ≠ 12

In C sieht das so aus:

if((x != 12) && !(x != 12))

oder gekürzt:

if(x == 12)



Peter

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> wie denn nun ^^also es soll ausgeführt werden wenn x ≠ 5 und auserdem
> nicht wenn x ≠ 12 beides zugleich kommt nicht vor.

Daß x weder 5 noch 12 (also nicht 5 und auch nicht 12) ist, kann sehr 
wohl vorkommen.
Die Bedingung "x ist nicht gleich 12 oder x ist nicht gleich 5" ist 
immer wahr, denn x ist immer entweder ungleich 12 oder ungleich 5 
(oder beides).

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die erste Zeile muß natürlich:

if((x != 5) && !(x != 12))

heißen.

Peter

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

Bewertung
0 lesenswert
nicht lesenswert
@Peter:
Ich vermute mal, dass Mario da nur ein "nicht" zu viel hatte. Was 
anderes ist auch nicht wirklich sinnvoll. Ich denke mal, die 
Beschreibung in seinem ersten Posting ist die relevante...

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.