Operații de atribuire
Operațiile de atribuire stabilesc o valoare. În operațiile de atribuire sunt implicați doi operanzi, iar operandul din stânga poate reprezenta doar o expresie denumită modificabilă, de exemplu, o variabilă.
Ca și în multe alte limbaje de programare, în C# există operația de atribuire de bază =, care atribuie valoarea operandului din dreapta operandului din stânga:
int number = 23;
Aici, variabilei number i se atribuie numărul 23. Variabila number reprezintă operandul din stânga, căruia i se atribuie valoarea operandului din dreapta, adică numărul 23.
De asemenea, se poate efectua o atribuire multiplă pentru mai multe variabile simultan:
int a, b, c;
a = b = c = 34;
Este de menționat că operațiile de atribuire au o prioritate scăzută. Mai întâi va fi calculată valoarea operandului din dreapta și abia apoi această valoare va fi atribuită operandului din stânga. De exemplu:
int a, b, c;
a = b = c = 34 * 2 / 4; // 17
Mai întâi va fi calculată expresia 34 * 2 / 4, apoi valoarea obținută va fi atribuită variabilelor.
Pe lângă operația de atribuire de bază, în C# există și alte operații:
- +=: atribuire după adunare. Atribuie operandului din stânga suma operanzilor din stânga și dreapta: expresia A += B este echivalentă cu A = A + B
- -=: atribuire după scădere. Atribuie operandului din stânga diferența dintre operanzii din stânga și dreapta: A -= B este echivalentă cu A = A - B
- *=: atribuire după înmulțire. Atribuie operandului din stânga produsul operanzilor din stânga și dreapta: A *= B este echivalentă cu A = A * B
- /=: atribuire după împărțire. Atribuie operandului din stânga câtul împărțirii operandului din stânga la operandul din dreapta: A /= B este echivalentă cu A = A / B
- %=: atribuire după împărțirea pe modul. Atribuie operandului din stânga restul împărțirii operandului din stânga la operandul din dreapta: A %= B este echivalentă cu A = A % B
- &=: atribuire după AND pe biți. Atribuie operandului din stânga rezultatul operației AND pe biți între reprezentările binare ale operanzilor din stânga și dreapta: A &= B este echivalentă cu A = A & B
- |=: atribuire după OR pe biți. Atribuie operandului din stânga rezultatul operației OR pe biți între reprezentările binare ale operanzilor din stânga și dreapta: A |= B este echivalentă cu A = A | B
- ^=: atribuire după operația XOR. Atribuie operandului din stânga rezultatul operației XOR între reprezentările binare ale operanzilor din stânga și dreapta: A ^= B este echivalentă cu A = A ^ B
- <<=: atribuire după deplasarea pe biți la stânga. Atribuie operandului din stânga rezultatul deplasării binare a operandului din stânga la stânga cu un număr de biți egal cu valoarea operandului din dreapta: A <<= B este echivalentă cu A = A << B
- >>=: atribuire după deplasarea pe biți la dreapta. Atribuie operandului din stânga rezultatul deplasării binare a operandului din stânga la dreapta cu un număr de biți egal cu valoarea operandului din dreapta: A >>= B este echivalentă cu A = A >> B
Aplicarea operațiilor de atribuire:
int a = 10;
a += 10; // 20
a -= 4; // 16
a *= 2; // 32
a /= 8; // 4
a <<= 4; // 64
a >>= 2; // 16
Operațiile de atribuire sunt asociative la dreapta. Adică sunt efectuate de la dreapta la stânga. De exemplu:
int a = 8;
int b = 6;
int c = a += b -= 5; // 9
În acest caz, evaluarea expresiei va fi astfel:
1. b -= 5 (6 - 5 = 1)
2. a += (b -= 5) (8 + 1 = 9)
3. c = (a += (b -= 5)) (c = 9)