Expresiile în C ++ sunt o secvență de operanzi, operații și delimitatori. Operanzii sunt variabile, constante sau alte expresii. Delimiters în C ++ sunt caracterele [] () <>. ;. * = #, fiecare dintre care își îndeplinește funcția. O expresie poate consta în una sau mai multe operații și determină executarea unui număr de pași elementari pentru transformarea informațiilor. Compilatorul respectă o ordine strictă de interpretare a expresiilor, numite reguli de prioritate. Această comandă poate fi modificată dacă părțile separate ale expresiei sunt închise în paranteze. O operație elementară pentru transformarea informației este dată de semnul operației. Numărul de operanzi care participă la operație este împărțit în două grupuri de operații: unary (un operand) și binar (doi operanzi). În funcție de tipul operațiunii efectuate, sunt distincționate aritmetice, biți, logice, atribuire, relații etc.
Operațiuni de bază și prioritatea acestora
Limba C ++ include un set standard de operații de adăugare aritmetică (dat de +), scădere (-), înmulțire (*), divizare (/), care nu necesită explicații speciale. Specific pentru C ++ sunt operațiile de determinare a restului (%), increment (++) și decrement (-). Operația% este explicată prin următorul exemplu:
int a = 5, b = 2, c = 0, d;
d = a% b; / * d = 1 este restul întregii diviziuni 5/2 * /
d = a% c; / * mesaj de eroare împărțit la 0 * /
Operațiile de incrementare și decrementare cresc și descrește operandul cu 1. Operațiile ++ și - se pot aplica numai variabilelor. Există două forme de înregistrare: prefixul, atunci când operandu-l este situat în partea dreaptă a semnului de funcționare și postfix, când operandu-l este localizat înaintea semnului de operare. În forma prefixului, operandul este mai întâi incrementat cu 1 și valoarea mărită este utilizată în expresie. În forma postfix, valoarea operandului este luată mai întâi și numai după ce valoarea sa este incrementată cu 1. De exemplu:
int a = 0, b = 1, c;
c = a ++; / * c este 0 și este de 1 * /
c = ++ a; / * acum c = 2, a = 2 * /
Forma operațiilor de scriere ++ și - este exprimată în expresii compuse. În mod evident, nu există nicio distincție între expresiile singulare a ++; și ++ a; B-; și -b;
Operații logice bitwise
C ++ acceptă următoarele operații logice biți:
bit-logic AND (AND);
^ modulul de adăugare bitwise 2 (XOR - exclusiv sau);
| | bit logic OR (OR);
Fiecare bit al rezultatului este determinat din biții operanzi după cum se arată în Tabelul. 8.
Inversiunea necesită utilizarea unui singur operand în partea dreaptă a semnului
Rezultatul este format din inversarea biților tuturor biților operandului. exemple:
int s = 0x53c9, mască = 0x356c, r_or, r_and, r_xor, r_inv;
r_or = s | mască; / * r_or = 0x77ed * /
r_and = s&mask; / * r_and = 0x1148 * /
r_xor = s ^ mască; / * r_xor = 0x66a5 * /
Operațiile logice bitwise sunt utilizate pe scară largă pentru a extrage rapid restul din divizarea operanților int nesemnari prin valori care sunt multipli de două, precum și pentru a determina valoarea unuia sau mai multor biți de număr dat.
De exemplu, determinarea restului de divizare unsigned int operanzi 2, 4, 8, 16 și așa mai departe. D. Necesită bitwise logic operarea dividendului respectiv cu măști 0x01, 0x03, 0h07, 0x0F, 0x1f, și așa mai departe. D. Cu alte cuvinte, alocate mai tineri biți ai numărului, iar biții rămași sunt setați la 0. Aceasta este cea mai rapidă modalitate de alocare a restului.
int s = 0x05, mască = 0x01;
r_or = smask = 0x05 0x01 = 0x01;
Acesta este cel mai rapid mod de a aloca restul.
Limba C ++ include două operații de schimbare bițială:
<<- сдвиг влево операнда слева от знака операции на число двоичных разрядов справа от знака операции;
>> - trecerea spre dreapta operandului din stânga semnului de operație cu numărul de cifre binare din dreapta semnului de operare.
Biturile extinse sunt pierdute și sunt inserați biți zero.
Schimbarea operandelor la stanga cu 1, 2, 3 sau mai multe cifre este cea mai rapida metoda de divizare cu 2, 4, 8, ... De exemplu:
half_adr = adr >> 1; / * împărțirea cu 2 * /
double_adr = adr <<1; /* умножение на 2*/
Adesea, operațiile de schimbare se efectuează atunci când se transformă numere sau când se formează un număr întreg din părți.
Limitarea operației de schimbare este aceea că numărul de biți pentru deplasarea operandului spre stânga poate fi specificat numai printr-o expresie constantă sau constantă, adică printr-o expresie care constă în întregime din constante. Prin urmare, compilatorul va genera un mesaj de eroare în următorul caz:
int var1, shift = 5;
var1 = var1 >> schimbare;