Operatorii din C pentru valori întregi (Curs 2)

    Operatorul = (egal) este folosit pentru atribuirea valorii unei expresii întregi unei
variabile întregi:
i = expresie;
Operatorul returnează valoarea atribuită variabilei i, valoare rezultată în urma evaluării
expresiei şi conversiei la tipul variabilei i, în cazul nostru fiind vorba de tipul int. Astfel, de
exemplu i = 1 + sqrt(2) este o expresie care are valoarea 2.
Pentru tipurile întregi de date sunt definiţi operatorii aritmetici binari: + (adunare), -
(scădere), * (înmulţire), / (câtul împărţirii), % (restul împărţirii), +=, -=, *=, /=, %=, unde
expresia x += y este echivalentă cu x = x+y.
Operatori aritmetici unari definiţi pentru tipurile întregi de date sunt: ++ şi --. Ei
realizează incrementarea, respectiv decrementarea unei variabile întregi. Astfel, x++ este
echivalent cu x = x+1, iar x-- cu x = x-1. Cei doi operatori unari se folosesc sub două forme:
x++, x--, adică forma postincrementare, respectiv postdecrementare, iar ++x, --x sunt sub forma
preincrementare, respectiv predecrementare. Să explicăm acum care este diferenţa dintre cele
două forme de utilizare a operatorului de incrementare.
Presupunem că variabila y reţine valoarea 1. Pentru o expresie de forma x = ++y, întâi se
incrementează y şi apoi noua valoare a lui y se atribuie lui x şi, în consecinţă, x devine 2. Dacă
operatorul ++ se foloseşte în forma postincrementată, adică x = y++, atunci lui x întâi i se
atribuie valoarea variabilei y şi abia după aceea se face incrementarea lui y. În această situaţie
variabila x va fi iniţializată cu valoarea 1. Operatorul de decrementare -- funcţionează în mod
similar ca şi ++, tot sub două forme, predecrementare şi postdecrementare.
Operatorii relaţionali sunt: < (mai mic), <= (mai mic sau egal), > (mai mare), >= (mai
mare sau egal), == (egalitate), != (diferit). Cu alte cuvinte, cu ajutorul acestor operatori, două
valori întregi se pot compara.
Operatorul ! (semnul exclamării) aplicat unei valori numerice are efectul not, adică din
punct de vedere boolean îi schimbă valoarea (din False în True, respectiv din True în False).
Astfel, !x are valoare 0 dacă şi numai dacă x este nenul.
Operatori la nivel de bit aplicabili numai pe valori întregi sunt: & (şi pe biţi), | (sau pe
biţi), ^ (sau exclusiv), >> (shift-are biţi la dreapta), << (shift-are biţi la stânga), ~ (not pe biţi).
Pentru a înţelege cum funcţionează aceşti operatori dăm următorul exemplu:
Fie a şi b două variabile întregi pe un octet, a reprezentat pe biţi este (1,0,1,1,0,1,1,1) şi b
= (0,1,1,1,0,0,1,0).
11
Avem: a & b = (0,0,1,1,0,0,1,0), a | b = (1,1,1,1,0,1,1,1), a ^ b = (1,1,0,0,0,1,0,1), a >> 1
= (0,1,0,1,1,0,1,1), a << 1 = (0,1,1,0,1,1,1,0), ~a = (0,1,0,0,1,0,0,0).
Facem observaţia că dacă a este întreg cu semn (de tip char), atunci a >> 1 =
(1,1,0,1,1,0,1,1), deoarece cel mai semnificativ bit (cel mai stânga) reprezintă semnul numărului
întreg şi în consecinţă după shift-are la dreapta rămâne tot 1 (corespunzător semnului minus). Să
observăm că shift-area cu n biţi a unei valori întregi este echivalentă cu o împărţire la 2n. În cazul
exemplului nostru a >> 1 este echivalent cu a = a / 2.
Pentru operatorii pe biţi avem şi variantele combinate cu atribuire: &=, |=, ^=, <<=, >>=,
unde x &= y este echivalent cu x = x & y etc.

0 comentarii:

Trimiteți un comentariu