Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2007/08 Laboratorio di Linguaggi lezione VIII A: Operatori e Assegnamenti
M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Espressioni e operatori operatori su numeri -+*/ % >><<&| ==>=<=> < ||&&! != ==!= - + operatori relazionali operatori logici (booleani) unari binari
M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Operatori Logici In C la semantica degli operatori logici e' lazy if ((x<5)&&(fscanf(f,"-%c",&c)) ) {... }
M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Assegnamenti Assegnamento base = =
M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Left values: oggetti dotati di indirizzo Cosa e un left value –una variabile –una espressione di tipo puntatore... deferenziata –un elemento di un vettore –un campo di una variabile di tipo struct Non sono left values: –qualunque altra espressione –(costanti, risultati di operazioni, etc) Test mentale: –posso metterla a sinistra di un assegnamento?
M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Left values: oggetti dotati di indirizzo Esempi: –quali sono left values? v[3] v[3+x] 5 const int N=5; int v[15]; int x,y; int * p; Persona r; p *p N x x/5 &x *(p+10) &p (*p) + 10 v[x]+3 5+x&x + 2 *((&x)+2) r r.nome r.eta + 5 x + y
M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Left values: Solo un left-value puo' : –essere usato a sx di un assegnamento –subire loperatore –subire operatori di modifica che mutano il valore &
M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Operatori unari di modifica operatori su numeri -+*/ % >><<&| ==>=<=> < ||&&! != ==!= - + operatori relazionali operatori logici (booleani) unari binari x+=3; x>>=1; x=x+3; x = x >> 1; -=+=*=/= %=%= >>=<<=&=|= operatori di modifica (scorciatoie sintattiche)
M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Operatori unari di modifica incremento - decremento x++x-- ++x--x l'espressione vale il valore non ancora incrementato / decrementato ("prima usa il valore, poi incrementa / decrementa la variabile") l'espressione vale il valore già incrementato / decrementato ("prima incrementa / decrementa la variabile, poi usa il valore ")
M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Assegnamenti Assegnamento base = = tipo T 0 tipo T 1 typecast automatico se T 0 diverso da T 1 (ma solo se esiste una conversione automatica). Ma e' sempre meglio (piu' chiaro) usare un typecast esplicito!
M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Assegnamenti Assegnamento base = = tipo T 0 tipo T 1 expr di tipo T 0 typecast automatico se T 0 diverso da T 1 (ma solo se esiste una conversione automatica). Ma e' sempre meglio (piu' chiaro) usare un typecast esplicito! x = y = z = 10;