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
Scarica

ppt