Marco Tarini

11
Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 boratorio di Linguaggi ione VIII A: Operatori e Assegnamenti

description

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

Transcript of Marco Tarini

Page 1: Marco Tarini

Marco Tarini

Università dell’InsubriaFacoltà di Scienze Matematiche, Fisiche e Naturali di VareseCorso di Laurea in InformaticaAnno Accademico 2006/07

Laboratorio di Linguaggi

lezione VIII A: Operatori e Assegnamenti

Page 2: Marco Tarini

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

Espressioni e operatori

operatori su numeri- + * / %

>> << & |

== >= <= > <

|| && !

!=

==!=

-

+

operatori relazionali

operatori logici (booleani)

unar

ibi

nari

Page 3: Marco Tarini

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)) ) { ...}

Page 4: Marco Tarini

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>

Page 5: Marco Tarini

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?

Page 6: Marco Tarini

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?

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) + 10v[x]+3

5+x &x + 2

*((&x)+2)

r

r.nome

r.eta + 5

x + y

Page 7: Marco Tarini

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

&

Page 8: Marco Tarini

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

>> << & |

== >= <= > <

|| && !

!=

==!=

-

+

operatori relazionali

operatori logici (booleani)

unar

ibi

nari

x+=3;

x>>=1;

x=x+3;

x = x >> 1;

-= += *= /= %=

>>= <<= &= |=

operatori di modifica(scorciatoie sintattiche)

Page 9: Marco Tarini

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

• 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 ")

Page 10: Marco Tarini

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>

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!

Page 11: Marco Tarini

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>

tipo T0 tipo T1

expr di tipo T0

typecast automatico se T0 diverso da T1 (ma solo se esiste una conversione automatica).Ma e' sempre meglio (piu' chiaro) usare un typecast esplicito!

x = y = z = 10;