Con la lezione di oggi cominciamo a vedere in che modo è possibile
lavorare sui tipi di dati fondamentali visti nelle lezioni precedenti.
Abbiamo già visto che l'assegnamento in C viene effettuato utilizzando
il simbolo "=" (uguale), ad es.:
int x = 0; Oltre agli operatori aritmetici standard:
+ (somma)
- (sottrazione)
* (moltiplicazione)
/ (divisione)
esiste l'operatore % (modulo) per gli interi, che ritorna il resto
di una divisione intera.
Ecco un semplice es. che riassume l'utilizzo di questi operatori
per gli interi:
int x = 10;
int y = 3;
int h, j, k, u, v;
h = x + y; /* h contiene il valore 13 */
j = x - y; /* j contiene il valore 7 */
k = x * y; /* k contiene il valore 30 */
u = x / y; /* u contiene il valore 3 */
v = x % y; /* v contiene il valore 1 */
Per gli interi il C offre anche gli operatori di incremento (++)
e decremento (--), che possono essere preposti o posposti alla variabile.
Se sono preposti il valore incrementato o decrementato è calcolato
prima che l'espessione sia valutata, se sono posposti il valore
viene calcolato dopo la valutazione dell'espressione, ad es.:
int x, z=2;
es. 1)
x = (++z)-1; /* Prima
viene incrementato z al valore 3 e poi viene assegnato a x il valore
3-1=2 */
es. 2)
x = (z++)-1; /* Prima
viene assegnato a x il valore 2-1=1 e poi incrementato z al valore
3 */
Ecco un ulteriore esempio:
int x, y, w;
x=((++y) - (w--)) % 10;
che equivale alle seguenti istruzioni:
int x, y, w;
y++;
x = (y - w) % 10;
w--;
È importante sottolineare che un'istruzione del tipo x++ è più veloce
della corrispondente x = x+1. L'operatore "%" (modulo)
può essere utilizzato solamente con le variabili di tipo integer;
la divisione "/" è utilizzata sia per gli integer
che per i float. A proposito della divisione riportiamo un
altro esempio:
f = 5/2;
in cui f assumerà il valore 1, anche se è stato dichiarato
come float. Infatti, di regola, se entrambi gli argomenti
della divisione sono integer, allora verrà effettuata una
divisione intera. Per avere un risultato di tipo float è
necessario scrivere:
f = 5.0/2;
oppure:
f = 5/2.0;
oppure ancora:
f = 5.0/2.0;
In questo modo f assumerà il valore 2.5. Esiste, inoltre,
una forma contratta per espressioni del tipo:
expr1 = expr1 op expr2
dove op è un operatore.
Infatti, queste espressioni possono scriversi nella forma:
expr1 op= expr2
Ad es.:
x = x+5;
può essere scritta in forma contratta:
x += 5;
e ancora:
x = x * (y+7);
può diventare:
x *= y+7;
E' importante notare che l'espressione x
*= y+3 corrisponde a
x = x*(y+7) e non a x
= (x*y)+7.
Gli operatori relazionali o di confronto vengono utilizzati
per testare delle condizioni di uguaglianza e disuguaglianza e sono
utilizzati spesso nei programmi.
Per testare l'uguaglianza si usa:
==
per la disuguaglianza:
>!=
Vi sono poi gli operatori:
< (minore)
> (maggiore)
<= (minore o uguale)
>= (maggiore o uguale)
Gli operatori relazionali hanno una precedenza inferiore agli operatori
aritmetici, perciò un'espressione del tipo:
i <= lim-1
viene interpretata come:
i <= (lim-1)
Occorre fare molta attenzione all'utilizzo del test di uguaglianza,
perché spesso avviene che ci si dimentica di mettere il secondo
segno di uguale, col risultato che invece di testare una condizione
si esegue un assegnamento (vedremo meglio questo possibile errore
nella prossima lezione).
Infine vediamo gli operatori logici, che sono due:
&& (AND)
|| (OR)
Le espessioni connesse da && e || vengono valutate da sinistra
a destra e la valutazione si blocca non appena si determina la verità
o la falsità dell'intera espressione.
Come vedremo in seguito questa proprietà risulta molto utile per
evitare certi errori durante l'esecuzione dei programmi, come divisioni
per zero o superamento dei limiti di un array.
Nella prossima lezione vedremo come utilizzare alcuni di questi
operatori per controllare il flusso di esecuzione dei nostri programmi.
Torna all'indice Generale del corso di Corso di C con Linux di Software Planet