Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

Vorrang und Assoziativität von C#-Operatoren

Vorrang und Assoziativität von C#-Operatoren

In diesem Tutorial lernen Sie die Operatorpräzedenz und Assoziativität in C# kennen. Dies gibt uns eine Vorstellung davon, wie ein Ausdruck vom C#-Compiler ausgewertet wird.

Vorrang von C#-Operatoren

Die Operatorpriorität ist eine 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.

Zum Beispiel , der Vorrang der Multiplikation (*) Operator ist höher als die Rangfolge des Zusatzes (+) Operator. Daher wird die Multiplikationsoperation vor der Addition ausgeführt.

Sehen Sie sich die folgende Erklärung an.

int x = 4 + 3 * 5;

Welchen Wert hat x? nachdem Sie diese Anweisung ausgeführt haben?

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

Wenn der Zusatz einen höheren Vorrang hätte, 4 + 3 zuerst ausgewertet und der Wert von x wäre 35 .


Operator-Rangfolgetabelle

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

Vorrang des C#-Operators
Kategorie Operatoren
Postfix Inkrement und Dekrement ++, --
Präfix erhöhen, verringern und unär ++, --, +, -, !, ~
Multiplikativ *, /, %
Additiv +, -
Umschalten <<,>>
Relational <, <=,>,>=
Gleichheit ==, !=
Bitweises UND &
Bitweises XOR ^
Bitweises ODER |
Logisches UND &&
Logisches ODER ||
Ternär ? :
Zuweisung =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,>>=

Die Zuweisungsoperatoren haben den niedrigsten Vorrang, während die Postfix-Inkrement- und -Dekrementoperatoren den höchsten Vorrang haben.


Beispiel 1:Operatorvorrang

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
False

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

Der Vorrang von -- und ++ ist höher als * , und Vorrang von * ist höher als - . Daher die Aussage,

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

entspricht

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

Der Ausdruck innerhalb der Klammern wird immer zuerst ausgewertet, unabhängig von der Priorität der Operatoren außerhalb.

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


Assoziativität von Operatoren in C#

Im vorherigen Abschnitt haben wir über die Priorität von Operatoren gesprochen. Wenn zwei Operatoren mit unterschiedlicher Priorität verwendet werden, wird der Operator mit der höheren Priorität zuerst ausgewertet.

Aber was ist, wenn beide Operatoren dieselbe Priorität haben?

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

Zum Beispiel:

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

Hier beide * und / haben den gleichen Vorrang. Aber da die Assoziativität dieser Operatoren von links nach rechts ist , a * b zuerst ausgewertet und dann dividiert. Das Endergebnis dieses Ausdrucks ist 10 .

In diesem speziellen Beispiel spielt die Assoziativität keine Rolle. Denn selbst wenn vor der Multiplikation dividiert würde, wäre das Ergebnis unbeeinflusst.

Schauen wir uns ein weiteres Beispiel an.

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

Die Assoziativität von = Operator ist von rechts nach links . Also der Wert von c (also 3 ) wird b zugewiesen , und dann den Wert von b ist a zugeordnet . Nach Ausführung dieser Anweisung werden also die Werte von a , b und c wird 3 sein .

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

C#-Assoziativität von Operatoren
Kategorie Operatoren Assoziativität
Postfix Inkrement und Dekrement ++, -- Von links nach rechts
Präfix erhöhen, verringern und unär ++, --, +, -, !, ~ Rechts nach links
Multiplikativ *, /, % Von links nach rechts
Additiv +, - Von links nach rechts
Umschalten <<,>> Von links nach rechts
Relational <, <=,>,>= Von links nach rechts
Gleichheit ==, != Von links nach rechts
Bitweises UND & Von links nach rechts
Bitweises XOR ^ Von links nach rechts
Bitweises ODER | Von links nach rechts
Logisches UND && Von links nach rechts
Logisches ODER || Von links nach rechts
Ternär ? : Rechts nach links
Zuweisung =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,>>= Rechts nach links

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


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

C Sprache

  1. C#-Schlüsselwörter und Bezeichner
  2. C#-Operatoren
  3. C# ternärer (? :) Operator
  4. C#-Klasse und -Objekt
  5. Abstrakte C#-Klasse und -Methode
  6. C# Teilklasse und Teilmethode
  7. Versiegelte C#-Klasse und -Methode
  8. Operatoren in C++ mit Beispiel:Was ist, Typen und Programme
  9. C - Konstanten und Literale
  10. C - Eingang und Ausgang