Forum: Mikrocontroller und Digitale Elektronik Was macht diese Programmzeile?


von Hans (Gast)


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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?


von Juli (Gast)


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?

von Rahul D. (rahul)


Lesenswert?

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

von Rahul D. (rahul)


Lesenswert?

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

von Juli (Gast)


Lesenswert?

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

Und das seit 1998 LOL

von Hans (Gast)


Lesenswert?

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

von Winfried (Gast)


Lesenswert?

...dann wird mask addiert, ansonsten nichts

von Hans (Gast)


Lesenswert?

Ok, danke!

von OliverSo (Gast)


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:
1
 if (DIN) rbyte+=mask else rbyte +=0;
Also wird mask zu rbyte addiert, wenn DIN nicht Null ist.

Oliver

von Hans (Gast)


Lesenswert?

Danke, jetzt habe ich es verstanden!

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.