C# Operator Prioriteit en Associativiteit Onder de Loep: Een Praktische Gids
C# Operator Prioriteit en Associativiteit Onder de Loep
Deze uitgebreide tutorial legt uit hoe de C# compiler expressies evalueert door de regels voor operator prioriteit en associativiteit toe te passen. Leer met duidelijke voorbeelden en referentietabellen.
Operator Prioriteit in C#
Operator prioriteit definieert de volgorde waarin delen van een expressie worden geëvalueerd. Elke C# operator heeft een vast prioriteitsniveau, wat ervoor zorgt dat de compiler expressies consistent verwerkt.
De vermenigvuldigingsoperator * heeft bijvoorbeeld een hogere prioriteit dan de opteloperator +. In de expressie
int x = 4 + 3 * 5;vindt de vermenigvuldiging dus eerst plaats, wat resulteert in
x = 19.
Als optellen voorrang zou hebben op vermenigvuldigen, zou het resultaat 35 zijn — maar C# volgt de vaste prioriteitshiërarchie.
Operator Prioriteitstabel
De onderstaande tabel lijst operators van hoogste naar laagste prioriteit.
| Categorie | Operators |
|---|---|
| Postfix Increment en Decrement | |
| Prefix Increment, Decrement en Unaire | ++, --, +, -, !, ~ |
| Multiplicatief | *, /, % |
| Additief | +, - |
| Shift | <<, >> |
| Relationeel | <, <=, >, >= |
| Gelijkheid | ==, != |
| Bitwise AND | & |
| Bitwise XOR | ^ |
| Bitwise OR | | |
| Logische AND | && |
| Logische OR | || |
| Ternair | ? : |
| Toewijzing | =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= |
Toewijzingen hebben de laagste prioriteit, terwijl postfix increment/decrement bovenaan staan.
Voorbeeld 1: Operator Prioriteit
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);
}
}
}
Het uitvoeren van dit programma print:
19 False
Evaluatiestappen:
(--a)→ 4 (a wordt 4)(++c)→ 5 (c wordt 5)(a * b)→ 24- Aftrekken: 24 - 5 = 19
De tweede expressie toont dat optellen + een hogere prioriteit heeft dan vergelijking >=, dus c + a wordt geëvalueerd voordat de vergelijking plaatsvindt.
Associativiteit van Operators in C#
Wanneer twee operators dezelfde prioriteit delen, gebruikt de compiler associativiteit om de evaluatievolgorde te bepalen. De meeste C# operators zijn linkslinks, maar een paar zijn rechts-links.
Voorbeeld:
int a = 5, b = 6, c = 3; int result = a * b / c;
Omdat * en / linkslinks zijn, wordt de vermenigvuldiging eerst uitgevoerd, wat 10 oplevert.
Rechts-links associativiteit is cruciaal in toewijzingsketens:
int a = 5, b = 6, c = 3; a = b = c;
De waarde 3 wordt toegewezen aan b, daarna b aan a, waardoor alle variabelen 3 bevatten.
De onderstaande tabel vat de C# operator associativiteit samen.
| Categorie | Operators | Associativiteit |
|---|---|---|
| Postfix Increment en Decrement | ++, -- | Links naar Rechts |
| Prefix Increment, Decrement en Unaire | ++, --, +, -, !, ~ | Rechts naar Links |
| Multiplicatief | *, /, % | Links naar Rechts |
| Additief | +, - | Links naar Rechts |
| Shift | <<, >> | Links naar Rechts |
| Relationeel | <, <=, >, >= | Links naar Rechts |
| Gelijkheid | ==, != | Links naar Rechts |
| Bitwise AND | & | Links naar Rechts |
| Bitwise XOR | ^ | Links naar Rechts |
| Bitwise OR | | | Links naar Rechts |
| Logische AND | && | Links naar Rechts |
| Logische OR | || | Links naar Rechts |
| Ternair | ? : | Rechts naar Links |
| Toewijzing | =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= | Rechts naar Links |
Belangrijke rechts-links operators zijn unaire prefixes, de ternaire operator en alle toewijzingen.
Voorbeeld 2: Associativiteit in Actie
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}");
}
}
}
De output is:
10 a = 3, b = 3, c = 3
C Taal
- C# Keywords en Identifiers begrijpen: Regels, lijsten en best practices
- C# Operators – Uitgebreide gids voor operators in C#
- De C# Ternaire Operator: Beknopte Gids voor Conditionele Expressies
- C# Classes & Objects: Fundamenten voor Robuuste OOP
- C# Abstract Classes & Methods: Een Praktische Gids
- C# Partial Classes en Methods: Een Praktische Gids
- C# Sealed Classes en Methods: Wanneer en Hoe Te Gebruiken
- C++ Operators Uitgelegd: Typen, Voorbeelden en Voorbeeldprogramma's
- C-constanten en literals: Types, gebruik en best practices
- Invoer en uitvoer in C programmeren: Volledige gids
- Uitgebreide Gids voor Datum en Tijd in C++