Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C#-operatorvoorrang en associativiteit

C#-operatorvoorrang en associativiteit

In deze tutorial leer je over operatorprioriteit en associativiteit in C#. Dit geeft ons een idee van hoe een expressie wordt geëvalueerd door de C#-compiler.

C#-operatorvoorrang

Operatorprioriteit is een set regels die bepaalt hoe een expressie wordt geëvalueerd. In C# heeft elke C#-operator een toegewezen prioriteit en op basis van deze prioriteiten wordt de uitdrukking geëvalueerd.

Bijvoorbeeld , de prioriteit van vermenigvuldiging (*) operator is hoger dan de prioriteit van optellen (+) exploitant. Daarom wordt een bewerking met vermenigvuldiging uitgevoerd vóór optelling.

Bekijk de verklaring hieronder.

int x = 4 + 3 * 5;

Wat zal de waarde zijn van x na het uitvoeren van deze instructie?

De operand 3 wordt geassocieerd met + en * . Zoals eerder vermeld, heeft vermenigvuldigen een hogere prioriteit dan optellen. Dus de bewerking 3 * 5 wordt uitgevoerd in plaats van 4 + 3 . De waarde van variabele x wordt 19 .

Als toevoeging een hogere prioriteit zou hebben, 4 + 3 zou eerst worden geëvalueerd en de waarde van x zou 35 . zijn .


Voorrangstabel operator

Hoe hoger de prioriteit van de operator, hoe hoger deze in de tabel wordt weergegeven

C#-operatorvoorrang
Categorie Operators
Postfix verhogen en verlagen ++, --
Prefix Verhogen, Verlagen en Unair ++, --, +, -, !, ~
Multiplicatief *, /, %
Additief +, -
Shift <<,>>
Relationeel <, <=,>,>=
Gelijkheid ==, !=
Bitgewijs EN &
Bitwise XOR ^
Bitgewijs OF |
Logisch EN &&
Logische OF ||
Ternair ? :
Opdracht =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,>>=

De toewijzingsoperatoren hebben de laagste prioriteit, terwijl de postfix-operatoren voor verhogen en verlagen de hoogste prioriteit hebben.


Voorbeeld 1:Voorrang van operator

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);
		}
	}
}

Wanneer we het programma uitvoeren, is de uitvoer:

19
False

Laten we eens kijken hoe de uitdrukking in het programma wordt geëvalueerd.

De prioriteit van -- en ++ is hoger dan * , en voorrang van * is hoger dan - . Vandaar de verklaring,

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

is gelijk aan

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

De uitdrukking tussen haakjes wordt altijd eerst geëvalueerd, ongeacht de prioriteit van de operatoren erbuiten.

  • Aanvankelijk (--a) wordt geëvalueerd wat resulteert in 4 .
  • Vervolgens (++c) wordt geëvalueerd wat resulteert in 5 .
  • Nu, (a * b) wordt geëvalueerd wat resulteert in 24 .
  • Ten slotte wordt de aftrekking uitgevoerd, wat resulteert in 19 .
  • Vandaar de uiteindelijke waarde van result1 wordt 19 .

In de volgende uitdrukking, de prioriteit van + is hoger dan >= . Dus, c en een wordt eerst opgeteld en de som wordt vergeleken met b om false te produceren .


Associativiteit van operators in C#

In de vorige sectie hebben we het gehad over operatorprioriteit. Als twee operators met verschillende prioriteit worden gebruikt, wordt de operator met hogere prioriteit eerst geëvalueerd.

Maar wat als beide operators dezelfde prioriteit hebben?

In dat geval wordt de uitdrukking geëvalueerd op basis van de associativiteit van de operator (van links naar rechts of van rechts naar links).

Bijvoorbeeld:

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

Hier, beide * en / dezelfde voorrang hebben. Maar aangezien de associativiteit van deze operatoren van links naar rechts is, , a * b wordt eerst geëvalueerd en vervolgens wordt de verdeling uitgevoerd. Het uiteindelijke resultaat van deze uitdrukking is 10 .

In dit specifieke voorbeeld doet de associativiteit er niet echt toe. Want zelfs als deling werd uitgevoerd vóór vermenigvuldiging, zou het resultaat onaangetast blijven.

Laten we een ander voorbeeld bekijken.

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

De associativiteit van = operator is van rechts naar links . Dus de waarde van c (d.w.z. 3 ) is toegewezen aan b , en dan de waarde van b is toegewezen aan a . Dus na het uitvoeren van deze instructie, worden de waarden van a , b en c wordt 3 .

De onderstaande tabel toont de associativiteit van C#-operators:

C# Associativiteit van operators
Categorie Operators Associativiteit
Postfix verhogen en verlagen ++, -- Links naar rechts
Prefix Verhogen, Verlagen en Unair ++, --, +, -, !, ~ Van rechts naar links
Multiplicatief *, /, % Links naar rechts
Additief +, - Links naar rechts
Shift <<,>> Links naar rechts
Relationeel <, <=,>,>= Links naar rechts
Gelijkheid ==, != Links naar rechts
Bitgewijs EN & Links naar rechts
Bitwise XOR ^ Links naar rechts
Bitgewijs OF | Links naar rechts
Logisch EN && Links naar rechts
Logische OF || Links naar rechts
Ternair ? : Van rechts naar links
Opdracht =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,>>= Van rechts naar links

Bijna alle operatoren hebben associativiteit van links naar rechts. De operatoren met associativiteit van rechts naar links zijn:

  • Unaire operatoren
  • Voorvoegsel voor het verhogen en verlagen van operators
  • Ternaire operator
  • Opdrachtoperators

Voorbeeld 2:Associativiteit van operators

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);
		}
	}
}

Wanneer we het programma uitvoeren, is de uitvoer:

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

C Taal

  1. C#-zoekwoorden en -ID's
  2. C#-operators
  3. C# ternair (? :) Operator
  4. C# klasse en object
  5. C# abstracte klasse en methode
  6. C# Gedeeltelijke klasse en gedeeltelijke methode
  7. C# verzegelde klasse en methode
  8. Operators in C++ met voorbeeld:wat is, typen en programma's
  9. C - Constanten en Letters
  10. C - Invoer en uitvoer
  11. C++ Datum en tijd