C # Vorrang und Assoziativität von Operatoren: Definition und Beispiele

In diesem Tutorial erfahren Sie mehr über die Priorität und Assoziativität von Operatoren in C #. Dies gibt uns eine Vorstellung davon, wie ein Ausdruck vom C # -Compiler ausgewertet wird.

C # Operator-Vorrang

Die Operatorrangfolge besteht aus einer Reihe von Regeln, die definieren, wie ein Ausdruck ausgewertet wird. In C # hat jeder C # -Operator eine zugewiesene Priorität und basierend auf diesen Prioritäten wird der Ausdruck ausgewertet.

Beispielsweise ist die Priorität des Multiplikationsoperators (*)höher als die Priorität des Additionsoperators (+). Daher wird eine Operation mit Multiplikation vor der Addition ausgeführt.

Schauen Sie sich die folgende Erklärung an.

 int x = 4 + 3 * 5;

Was ist der Wert von x nach Ausführung dieser Anweisung?

Der Operand 3ist mit +und verknüpft *. Wie bereits erwähnt, hat die Multiplikation eine höhere Priorität als die Addition. Die Operation 3 * 5wird also statt ausgeführt 4 + 3. Der Wert der Variablen x ist 19.

Wenn die Addition eine höhere Priorität 4 + 3hätte , würde sie zuerst ausgewertet und der Wert von x wäre 35.

Operator-Rangfolge-Tabelle

Je höher die Priorität des Operators ist, desto höher erscheint er in der Tabelle

C # Operator Vorrang
Kategorie Betreiber
Postfix Inkrementieren und Dekrementieren ++, -
Präfix Inkrementieren, Dekrementieren und Unär ++, -, +, -,!, ~
Multiplikativ *, /,%
Zusatzstoff +, -
Verschiebung <>
Relational <,,> =
Gleichberechtigung == ,! =
Bitweises UND &
Bitweises XOR ^
Bitweises ODER |
Logisches UND &&
Logisches ODER ||
Ternär ? ::
Zuordnung =, + =, - =, * =, / =,% =, & =, | =, =, <> =

Die Zuweisungsoperatoren haben die niedrigste Priorität, während die Postfix-Inkrementierungs- und Dekrementierungsoperatoren die höchste Priorität haben.

Beispiel 1: Operatorrang

 using System; namespace Operator ( 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); ) ) ) 

Wenn wir das Programm ausführen, lautet die Ausgabe:

 19 Falsch

Lassen Sie uns verstehen, wie der Ausdruck im Programm ausgewertet wird.

Die Priorität von --und ++ist höher als *und die Priorität von *ist höher als -. Daher die Aussage,

 Ergebnis1 = --a * b - ++ c;

ist äquivalent zu

 Ergebnis1 = ((--a) * b) - (++ c);

Der Ausdruck in Klammern wird immer zuerst ausgewertet, unabhängig davon, welche Priorität Operatoren außerhalb haben.

  • Zunächst wird (--a) ausgewertet, was zu ergibt 4.
  • Dann wird (++ c) ausgewertet, was zu ergibt 5.
  • Nun wird (a * b) ausgewertet, was zu ergibt 24.
  • Schließlich wird die Subtraktion ausgeführt, die sich ergibt 19.
  • Daher ist der Endwert von Ergebnis1 19.

Im nächsten Ausdruck ist die Priorität von +höher als >=. Also werden zuerst c und a addiert und die Summe mit b verglichen, um zu erzeugen false.

Assoziativität von Operatoren in C #

Im vorherigen Abschnitt haben wir die Priorität von Operatoren erörtert. Wenn zwei Operatoren mit unterschiedlicher Priorität verwendet werden, wird zuerst der Operator mit höherer Priorität ausgewertet.

Was aber, wenn beide Operatoren den gleichen Vorrang haben?

In diesem Fall wird der Ausdruck basierend auf der Assoziativität des Operators (von links nach rechts oder von rechts nach links) bewertet.

Beispielsweise:

int a = 5, b = 6, c = 3; int result = a * b / c;

Hier haben beide *und /die gleiche Priorität. Da aber die Assoziativität dieser Operatoren von links nach rechts ist , a * bwird zuerst ausgewertet und dann die Division durchgeführt. Das Endergebnis dieses Ausdrucks wird sein 10.

In diesem speziellen Beispiel spielt die Assoziativität keine Rolle. Denn selbst wenn die Division vor der Multiplikation durchgeführt würde, würde das Ergebnis nicht beeinflusst.

Schauen wir uns ein anderes Beispiel an.

int a = 5, b = 6, c = 3; a = b = c;

Die Assoziativität des =Operators ist von rechts nach links . Also wird der Wert von c (dh 3) b zugewiesen, und dann wird der Wert von b a zugewiesen. Nach dem Ausführen dieser Anweisung sind die Werte von a, b und c 3.

Die folgende Tabelle zeigt die Assoziativität von C # -Operatoren:

C # Assoziativität von Operatoren
Kategorie Betreiber Assoziativität
Postfix Inkrementieren und Dekrementieren ++, - Links nach rechts
Präfix Inkrementieren, Dekrementieren und Unär ++, -, +, -,!, ~ Rechts nach links
Multiplikativ *, /,% Links nach rechts
Zusatzstoff +, - Links nach rechts
Verschiebung <> Links nach rechts
Relational <,,> = Links nach rechts
Gleichberechtigung == ,! = 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
Zuordnung =, + =, - =, * =, / =,% =, & =, | =, =, <> = Rechts nach links

Fast alle Operatoren haben Assoziativität von links nach rechts. Die Operatoren mit Assoziativität von rechts nach links sind:

  • Unäre Operatoren
  • Präfix-Inkrement- und Dekrement-Operatoren
  • Ternärer Operator
  • Zuweisungsoperatoren

Beispiel 2: Assoziativität von Operatoren

 using System; namespace Operator ( class OperatorPrecedence ( 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 = (0), b = (1), c = (2)", a, b, c); ) ) ) 

Wenn wir das Programm ausführen, lautet die Ausgabe:

 10 a = 3, b = 3, c = 3

Interessante Beiträge...