1 / 11

Marco Tarini

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. -. +. *. /. %.

egil
Download Presentation

Marco Tarini

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

More Related