Operatoren und Ausdrücke

Diese Lektion behandelt Operatoren und Ausdrücke in C. Ziel ist ein tiefes Verständnis der arithmetischen, logischen und Zuweisungsoperatoren sowie ihrer Prioritäten.

1. Arithmetische Operatoren

Arithmetische Operatoren führen mathematische Operationen auf numerischen Datentypen aus.
int a = 10, b = 3;
int sum = a + b;        // 13
int diff = a - b;       // 7
int prod = a * b;       // 30
int quot = a / b;       // 3 (ganzzahlig)
int rem = a % b;        // 1

2. Inkrement und Dekrement

++ erhöht den Wert um 1, -- verringert um 1.
int x = 5;
x++;   // x = 6
++x;   // x = 7
x--;   // x = 6
--x;   // x = 5
Präfix (++x) und Postfix (x++) unterscheiden sich in Auswertung innerhalb von Ausdrücken.

3. Zuweisungsoperatoren

Zuweisungsoperatoren speichern Werte in Variablen. Erweiterte Zuweisungen kombinieren Operation + Zuweisung.
int a = 10;
a += 5;   // a = 15
a *= 2;   // a = 30
a %= 7;   // a = 2

4. Vergleichsoperatoren

Vergleichsoperatoren liefern 0 (false) oder 1 (true).
int a = 5, b = 10;
printf("%d\n", a == b);   // 0
printf("%d\n", a != b);   // 1
printf("%d\n", a < b);  // 1

5. Logische Operatoren

Logische Operatoren arbeiten auf _Bool Werten oder 0/1.
_Bool a = 1, b = 0;
printf("%d\n", a && b); // 0
printf("%d\n", a || b); // 1
printf("%d\n", !a);     // 0

6. Präzedenz und Klammern

Operatoren haben Priorität. Klammern () können Auswertungsreihenfolge ändern.
int a = 2 + 3 * 4;    // 14
int b = (2 + 3) * 4;      // 20

7. Typumwandlung in Ausdrücken

Bei Mischtypen erfolgt implizite oder explizite Typumwandlung.
int a = 5;
double b = 2.5;
double sum = a + b;   // a wird implizit zu double
int c = (int) b;      // explizites Casting
printf("%f %d\n", sum, c);
Implizite Konvertierung kann zu Rundungsfehlern führen. Explizite Casts geben volle Kontrolle.

8. Zusammenfassung