C# Operator-Rangfolge und Assoziativität meistern: Ein praktischer Leitfaden
C# Operator-Rangfolge und Assoziativität meistern
Dieses ausführliche Tutorial erklärt, wie der C#-Compiler Ausdrücke durch Anwenden der Operator-Rangfolge und Assoziativitätsregeln auswertet. Lernen Sie mit klaren Beispielen und Referenztabellen.
Operator-Rangfolge in C#
Die Operator-Rangfolge definiert die Reihenfolge, in der Teile eines Ausdrucks ausgewertet werden. Jeder C#-Operator hat eine feste Prioritätsstufe, die sicherstellt, dass der Compiler Ausdrücke konsistent verarbeitet.
Zum Beispiel hat der Multiplikationsoperator * eine höhere Rangfolge als die Addition +. Daher wird im Ausdruck
int x = 4 + 3 * 5;die Multiplikation zuerst ausgeführt, was
x = 19 ergibt.
Wäre die Addition vor der Multiplikation priorisiert, wäre das Ergebnis 35 – aber C# folgt der etablierten Rangfolge-Hierarchie.
Operator-Rangfolge-Tabelle
Die folgende Tabelle listet Operatoren von der höchsten zur niedrigsten Rangfolge auf.
| Kategorie | Operatoren |
|---|---|
| Postfix-Inkrement und -Dekrement | |
| Präfix-Inkrement, -Dekrement und Unär | |
| Multiplikativ | |
| Additiv | |
| Shift | |
| Relational | |
| Gleichheit | |
| Bitweises UND | |
| Bitweises XOR | |
| Bitweises ODER | |
| Logisches UND | |
| Logisches ODER | |
| Ternär | |
| Zuweisung |
Zuweisungen haben die niedrigste Priorität, während Postfix-Inkremente/-Dekremente ganz oben stehen.
Beispiel 1: Operator-Rangfolge
using System;
namespace OperatorDemo {
class OperatorPrecedence {
public static void Main(string[] args) {
int result1;
int a = 5, b = 6, c = 4;
result1 = --a * b - ++c;
Console.WriteLine(result1);
bool result2;
result2 = b >= c + a;
Console.WriteLine(result2);
}
}
}
Die Programmausgabe:
19 False
Auswertungsschritte:
(--a)→ 4 (a wird 4)(++c)→ 5 (c wird 5)(a * b)→ 24- Subtraktion: 24 - 5 = 19
Der zweite Ausdruck zeigt, dass Addition + eine höhere Rangfolge hat als Vergleich >=, daher wird c + a vor dem Vergleich ausgewertet.
Assoziativität von Operatoren in C#
Wenn zwei Operatoren die gleiche Rangfolge haben, verwendet der Compiler die Assoziativität, um die Auswertungsreihenfolge zu bestimmen. Die meisten C#-Operatoren sind links-nach-rechts, aber einige sind rechts-nach-links.
Beispiel:
int a = 5, b = 6, c = 3; int result = a * b / c;
Da * und / links-nach-rechts assoziativ sind, wird die Multiplikation zuerst ausgeführt, was 10 ergibt.
Rechts-nach-links Assoziativität ist bei Zuweisungsketten entscheidend:
int a = 5, b = 6, c = 3; a = b = c;
Der Wert 3 wird b zugewiesen, dann b an a, sodass alle Variablen 3 halten.
Die folgende Tabelle fasst die C#-Operator-Assoziativität zusammen.
| Kategorie | Operatoren | Assoziativität |
|---|---|---|
| Postfix-Inkrement und -Dekrement | Links nach Rechts | |
| Präfix-Inkrement, -Dekrement und Unär | Rechts nach Links | |
| Multiplikativ | Links nach Rechts | |
| Additiv | Links nach Rechts | |
| Shift | Links nach Rechts | |
| Relational | Links nach Rechts | |
| Gleichheit | Links nach Rechts | |
| Bitweises UND | Links nach Rechts | |
| Bitweises XOR | Links nach Rechts | |
| Bitweises ODER | Links nach Rechts | |
| Logisches UND | Links nach Rechts | |
| Logisches ODER | Links nach Rechts | |
| Ternär | Rechts nach Links | |
| Zuweisung | Rechts nach Links |
Wichtige rechts-nach-links Operatoren sind unäre Präfixe, der ternäre Operator und alle Zuweisungen.
Beispiel 2: Assoziativität in Aktion
using System;
namespace OperatorDemo {
class OperatorAssociativity {
public static void Main(string[] args) {
int a = 5, b = 6, c = 3;
int result = a * b / c;
Console.WriteLine(result);
a = b = c;
Console.WriteLine($"a = {a}, b = {b}, c = {c}");
}
}
}
Die Ausgabe ist:
10 a = 3, b = 3, c = 3
C Sprache
- C# Keywords und Identifiers verstehen: Regeln, Listen und Best Practices
- C# Operatoren – Umfassender Leitfaden zu Operatoren in C#
- C# Ternärer Operator: Knapper Leitfaden zu bedingten Ausdrücken
- C# Klassen & Objekte: Fundamente für robustes OOP
- C# Abstrakte Klassen & Methoden meistern: Praktischer Leitfaden
- C# Partielle Klassen und Methoden verstehen
- Versiegelte Klassen und Methoden in C# meistern
- C++ Operatoren erklärt: Typen, Beispiele und Beispielprogramme
- C-Konstanten und Literale: Typen, Verwendung & Best Practices
- Eingabe und Ausgabe in C meistern: scanf, printf & Co.