Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Laboratorio di Linguaggi lezione VIII A: Operatori e Assegnamenti Marco Tarini Espressioni e operatori operatori su numeri - + >> * / % - & | + << != == >= <= > < binari unari operatori relazionali operatori logici (booleani) != == || && Marco Tarini ‧ Laboratorio di Linguaggi ‧ ! 2006/07 ‧ Università dell’Insubria Operatori Logici • In C la semantica degli operatori logici e' lazy if ((x<5)&&(fscanf(f,"-%c",&c)) ) { ... } Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2006/07 ‧ Università dell’Insubria Assegnamenti • Assegnamento base = <left value> = <expr> Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2006/07 ‧ Università dell’Insubria 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? Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2006/07 ‧ Università dell’Insubria Left values: oggetti dotati di indirizzo • Esempi: const int N=5; int v[15]; int x,y; int * p; Persona r; – quali sono left values? v[3] p x *((&x)+2) v[3+x] *p x/5 r 5 N &x r.nome v[x]+3 *(p+10) (*p) + 10 r.eta + 5 5+x &p &x + 2 x + y Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2006/07 ‧ Università dell’Insubria Left values: • Solo un left-value puo' : – essere usato a sx di un assegnamento – subire l’operatore & – subire operatori di modifica • che mutano il valore Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2006/07 ‧ Università dell’Insubria Operatori unari di modifica operatori su numeri - + * >> << / % - & | + %=relazionali *=operatori /= operatori di modifica (scorciatoie sintattiche) >>= <<= &= |= < != == >= <= > += binari unari -= x+=3; operatori != x>>=1; == x=x+3; logici (booleani) || && x = x >> ! 1; Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2006/07 ‧ Università dell’Insubria Operatori unari di modifica • incremento - decremento l'espressione vale il valore non ancora incrementato / decrementato ("prima usa il valore, poi incrementa / decrementa la variabile") x++ x-- ++x --x l'espressione vale il valore già incrementato / decrementato ("prima incrementa / decrementa la variabile, poi usa il valore ") Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2006/07 ‧ Università dell’Insubria Assegnamenti • Assegnamento base = <left value> = <expr> tipo T0 tipo T1 typecast automatico se T0 diverso da T1 (ma solo se esiste una conversione automatica). Ma e' sempre meglio (piu' chiaro) usare un typecast esplicito! Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2006/07 ‧ Università dell’Insubria Assegnamenti • Assegnamento base x = y = z = 10; = expr di tipo T0 <left value> = <expr> tipo T0 tipo T1 typecast automatico se T0 diverso da T1 (ma solo se esiste una conversione automatica). Ma e' sempre meglio (piu' chiaro) usare un typecast esplicito! Marco Tarini ‧ Laboratorio di Linguaggi ‧ 2006/07 ‧ Università dell’Insubria