Capitolul 2.10.Operatori si expresii de asignare

Vezi subiectul anterior Vezi subiectul urmator In jos

Capitolul 2.10.Operatori si expresii de asignare

Mesaj  zooky la data de Mier Mar 18, 2009 11:48 am

Expresii de tipul:

i = i + 2

in care membrul sting este repetat in membrul drept pot fi scrise intr-o forma condensata:

i += 2

folosind operatorul de asignare +=.
Majoritatea operatorilor binari (operatori ca +, care au un operand sting si un operand drept) au un operator de asignare corespunzator "op=", unde op este unul din:

+ - * / % << >> & ^ |

Daca e1 si e2 sint doua expresii, atunci:

e1 op= e2

este echivalent cu

e1 = (e1) op (e2)

cu exceptia ca e1 este calculat o singura data. Sa remarcam parantezele din jurul lui e2:

x *= y + 1

inseamna de fapt

x = x * (y + 1)

si nu

x = x * y + 1

Dam in continuare, drept exemplu, functia bitcount, care contorizeaza numarul de biti pe 1 dintr-un argument intreg.

bitcount(n) /* contorizeaza bitii 1 din n */
unsigned n;
{
int b;
for (b = 0; n != 0; n >>= 1)
if (n & 01)
b++;
return(b);
}

Lasind la o parte conciziunea, operatorii de asignare au avantajul ca ei corespund cel mai bine modului de gindire al oamenilor. Noi spunem "adunam 2 la i" sau " incrementam pe i cu 2" si nu "ia-l pe i, aduna 2, apoi pune rezultatul inapoi in i". Deci i += 2. In plus, pentru o expresie complicata, de tipul:

yyval[yypv[p3 + p4] + yypv[p1 + p2]] += 2

operatorul de asignare face codul mai usor de inteles, deoarece cititorul nu trebuie sa verifice sirguincios ca cele doua expresii sint intr-adevar o aceeasi sau sa se intrebe de ce nu sint. In plus, un operator de asignare ajuta chiar compilatorul sa produca un cod mai eficient.
Am folosit deja faptul ca o instructiune de asignare are o valoare si ca poate sa apara in expresii; exemplul cel mai comun:

while ((c = getchar()) != EOF)
...

Asignarile folosind alti operatori de asignare (+=, -=, etc) pot deasemenea sa apara in expresii, cu toate ca acestea se intimpla mai rar.
Tipul unei expresii de asignare este tipul operandului sau sting.

Exercitiul 2.9. Intr-un sistem cu numere cu complement fata de 2, x & (x-1) sterge bitul 1 cel mai departe de x. (De ce ?). Folositi aceasta observatie pentru a scrie o versiune mai rapida a lui bitcount.
avatar
zooky
Moderator
Moderator

Numarul mesajelor : 147
Data de inscriere : 15/03/2009
Varsta : 24
Localizare : Cernatesti City

Vezi profilul utilizatorului http://e-learning.forumhit.ro

Sus In jos

Vezi subiectul anterior Vezi subiectul urmator Sus


 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum