Marco Tarini
description
Transcript of 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
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
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?
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
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 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)
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 ")
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!
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;