110 likes | 257 Views
Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 200 6 /0 7. Laboratorio di Linguaggi lezione VIII A: Operatori e Assegnamenti. Marco Tarini. Espressioni e operatori. operatori su numeri. -. +. *. /. %.
E N D
Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Laboratorio di Linguaggilezione VIII A: Operatori e Assegnamenti Marco Tarini
Espressioni e operatori operatori su numeri - + * / % - >> << & | + operatori relazionali binari unari != == >= <= > < operatori logici (booleani) != == || && ! 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 ‧ 2 0 0 6 / 0 7 ‧ 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 ‧ 2 0 0 6 / 0 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Assegnamenti • Assegnamento base = <left value> = <expr> 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 ‧ 2 0 0 6 / 0 7 ‧ 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 ‧ 2 0 0 6 / 0 7 ‧ 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? const int N=5; int v[15]; int x,y; int * p; Persona r; v[3] p x *((&x)+2) *p x/5 r v[3+x] 5 N &x r.nome *(p+10) (*p) + 10 r.eta + 5 v[x]+3 5+x &p &x + 2 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 ‧ 2 0 0 6 / 0 7 ‧ 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 l’operatore • 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 ‧ 2 0 0 6 / 0 7 ‧ 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 di modifica (scorciatoie sintattiche) >>= <<= &= |= x+=3; x=x+3; x>>=1; x = x >> 1; operatori su numeri - + * / % - >> << & | + operatori relazionali binari unari != == >= <= > < operatori logici (booleani) != == || && ! 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 ‧ 2 0 0 6 / 0 7 ‧ 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 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 ") • incremento - decremento x++ x-- ++x --x 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 ‧ 2 0 0 6 / 0 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Assegnamenti 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! • Assegnamento base = <left value> = <expr> 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 ‧ 2 0 0 6 / 0 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Assegnamenti expr di tipo T0 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! • Assegnamento base x = y = z = 10; = <left value> = <expr> 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 ‧ 2 0 0 6 / 0 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a