www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Was macht diese Programmzeile?


Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle!

Hab da mal eine Frage:
Ich hab folgende Programmzeile in einem Programm gefunden:

rByte += DIN ? mask : 0;

Es hat mit A/D-Wandler zu tun, man vergleicht irgendwie das DIN 
(Data-In) mit einer Maske und dementsprechend wird dann das rByte 
gesetzt oder so irgendwie.

Kann mir jemand erklären, wie das genau funktioniert?

Danke schonmal für die Antworten.

lg Hans

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Juli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ternärer ?:-Operator

Als Einschub soll hier der ternäre Operator ?: behandelt werden. Dieser 
kann dazu dienen, innerhalb von Ausdrücken Teilausdrücke bedingt 
auszuwerten.

inline int abs(int number) {
  // compute absolute value
  return number > 0 ? number : -number;
}

Ist der vor dem Ausrufezeichen stehende Ausdruck wahr, so wird der 
Teilausdruck vor dem Doppelpunkt, sonst derjenige nach dem Doppelpunkt 
ausgewertet. Der resultierende Typ der beiden alternativen Ausdrücke muß 
gleich sein. Aufgrund der geringen Priorität dieses Operators und zur 
Verdeutlichung der Zusammengehörigkeit der Teilausdrücke sollte man sich 
angewöhnen, großzügig Klammern zu setzen.

  int i1   = 3 > 4 ? 0 : 1;          //  i1   is 1
  int i1_3 = 3 * ( 3 > 4 ? 0 : 1 );  //  i1_3 is 3
  int i2_3 = 3 *   3 > 4 ? 0 : 1;    //  i2_3 is 0




Welches Ausrufezeichen?

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Welches Ausrufezeichen?
Da kennt sich scheinbar jemand nicht mit den Satz(ende)-Zeichen aus.
Es sollte in dem Text wohl eher "...Fragezeichen..." heissen...

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im K&R ist das aber richtig beschrieben (AFIAR sogar in der 1. deutschen 
Auflage...)

Autor: Juli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Da kennt sich scheinbar jemand nicht mit den Satz(ende)-Zeichen aus.

Und das seit 1998 LOL

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heißt das, wenn DIN 1 ist, wird dann die Maske ausgewertet und sonst 
wird 0 gesetzt?

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...dann wird mask addiert, ansonsten nichts

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, danke!

Autor: OliverSo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Heißt das, wenn DIN 1 ist, wird dann die Maske ausgewertet und sonst
wird 0 gesetzt?"

Nicht ganz. Man könnte das auch so schreiben:
 if (DIN) rbyte+=mask else rbyte +=0;
Also wird mask zu rbyte addiert, wenn DIN nicht Null ist.

Oliver

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, jetzt habe ich es verstanden!

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.