Nella scorsa lezione abbiamo visto cosa sono le variabili e come si dichiarano per poterle utilizzare all'interno del nostro programma. Oggi vediamo quali operazioni è possibile fare con le variabili. Le operazioni fondamentali che si possono applicare ad un dato contenuto in una variabile sono fondamentalmente di due tipi: operazioni matematiche ed operazioni logiche.
Per quanto riguarda il primo tipo, in C è possibile eseguire qualsiasi tipo di operazione matematica. Per farlo, ci si avvale di operatori messi a disposizione dal linguaggio, e da funzioni di libreria. Esistono 5 operatori semplici che permettono di eseguire altrettante operazioni matematiche, e sono definiti attraverso simboli. Questi operatori vengono definiti "binari" in quanto accettano due parametri, uno posto alla sinistra del simbolo, ed uno posto alla sua destra, eseguendo l'operazione preposta tra questi due.
[LIST]+ --> Esegue l'addizione tra i due parametri[/LIST][LIST]- --> Esegue la sottrazione tra i due parametri[/LIST][LIST]* --> Esegue la moltiplicazione tra i due parametri[/LIST][LIST]/ --> Esegue la divisione tra i due parametri[/LIST][LIST]% --> Esegue la divisione tra i due parametri e dà come risultato il resto di quest'ultima.[/LIST]
Quando si esegue un'operazione matematica con uno dei cinque operatori presentati, si ha un risultato. Questo risultato, però, per poter essere consultato ed utilizzato successivamente, deve essere salvato in una variabile, altrimenti, una volta proseguiti oltre nel programma, non si avà più modo di fare riferimento ad esso. Nella scorsa lezione abbiamo visto che per assegnare un valore ad una variabile si utilizza l'operatore "=".
Facciamo un esempio: abbiamo una variabile chiamata "risultato" di tipo int a cui dobbiamo assegnare la somma del valore 4 con il valore 6. Possiamo scrivere:
int risultato;
risultato = 4 + 6;
Questa scrittura poteva essere eseguita su un'unica riga di codice:
int risultato = 4 + 6;
Ricordatevi che gli assegnamenti vanno letti sempre da destra verso sinistra quindi quando è presente il simbolo uguale prima viene risolto ciò che sta alla sua destra, poi viene risolto l'operando di sinistra e quindi a quest'ultimo gli viene assegnato ciò che è rimasto presente alla destra dell'operatore. Quindi nel nostro esempio quello che succede è questo: viene eseguita la somma tra 4 e 6 ed il risultato 10 viene tenuto sospeso in memoria (in realtà il risultato viene tenuto in un registro della CPU, ma è meglio non pensare a questo, almeno all'inizio!), dopodichè viene dichiarata una variabile di nome risultato e di tipo int e a questa viene assegnato il risultato totale (nel nostro caso 10)
Gli operatori possono essere anche combinati tra di loro, quindi si potrebbe avere una situazione di questo tipo:
risultato = 10 + 24 - 8 * 2 + 20 / 10;
Nel caso in cui si abbia la necessità di combinare più operatori va detto che ci sono delle regole di precedenza da seguire e cioè:
1) Il simbolo * ,il simbolo / ed il simbolo % vengono prima del simbolo + e del simbolo -
2) Vengono eseguite prima le operazioni indicate tra parentesi proseguendo dalla parentesi più interna verso quella più esterna
3) L'assegnamento viene eseguito come ultima operazione.
In realtà questi livelli di precedenza indicano la priorità di come il compilatore valuterà le singole operazioni da compiere all'interno dell'espressione, e ricalca per certi versi, le priorità che vengono date anche nella vita reale, quando ci si trova a dover svolgere un'espressione complessa.
Detto questo, riprendendo l'esempio posto sopra, il compilatore divide l'espressione nei seguenti passi:
1) Esegue prima la moltiplicazione (8 * 2) e si riporta ad una situazione del genere: risultato = 10 + 24 - 16 + 20 / 10;
2) Esegue la divisione (20 / 10) ottenendo: risultato = 10 + 24 - 16 + 2;
3) Esegue la somma (10 + 24) ottenendo: risultato = 34 - 16 + 2;
4) Esegue la sottrazione (34 - 16) ottenendo: risultato = 18 + 2;
5) Esegue la somma (18 + 2) ottenendo: risultato = 20;
6) Assegna il valore 20 alla variabile risultato
Sono possibili anche altre operazioni di tipo matematico in C, ma in questo caso vanno utilizzate le apposite funzioni di libreria. Ad esempio, se volessimo eseguire l'elevamento a potenza di un numero dovremo necessariamente utilizzare la funzione pow: questa funzione richiede due parametri, il numero da elevare e l'esponente e dà come risultato un valore di tipo long che rappresenta, appunto, l'elevamento a potenza.
Tutte le funzioni matematiche si trovano all'interno della libreria <math.h>
Oltre alle operazioni matematiche, è possibile effettuare sui dati, anche operazioni di natura diversa. Queste possono essere operazioni di confronto (dette anche di relazione) oppure operazioni di mascheratura (dette anche operazioni logiche). Le operazioni di confronto danno come risultato true (vero) oppure false (falso) a seconda degli operandi coinvolti e del tipo di operatore utilizzato, mentre nel caso degli operatori bit a bit essi restituiscono un nuovo dato ottenuto dall'unione logica dei due operandi (vedremo tra poco che cosa intendo)
Vediamo quali sono gli operatori che il C ci mette a disposizione:
Operatori di relazione (sono tutti operatori binari):
[LIST]< : Minore di --> Restituisce true se l'operando di sinistra risulta minore rispetto l'operando di destra altrimenti restituisce false[/LIST][LIST]> : Maggiore di --> Restituisce true se l'operando di sinistra risulta maggiore rispetto l'operando di destra altrimenti restituisce false[/LIST][LIST]<= : Minore o uguale di --> Restituisce true se l'operando di sinistra risulta minore o uguale rispetto l'operando di destra altrimenti restituisce false[/LIST][LIST]>= : Maggiore o uguale di --> Restituisce true se l'operando di sinistra risulta maggiore o uguale rispetto l'operando di destra altrimenti restituisce false[/LIST][LIST]== : Uguale a --> Restituisce true se entrambi gli operandi risultano essere identici altrimenti restituisce false[/LIST][LIST]!= : Diverso da --> Restituisce true se i due operandi sono diversi altrimenti restituisce false[/LIST]
I confronti eseguiti tramite gli operatori di relazione sono effettuati da sinistra verso destra
Esempi:
5 < 4 : false
10 >= 12 : false
4 == 4 : true
14 <= 20 : true
20 != 20 : false
Gli operandi possono essere anche espressioni numeriche:
(5 + 10) < (10 + 2) : false
10 * 2 - 8 >= 2 : true
23 + 44 - (8 * 2) == 50 + 2 - 1 : true
Operatori logici:
[LIST]&& : AND logico --> Confronta i singoli bit dell'operando di sinistra con i singoli bit dell'operando di destra. Se i bit sono entrambi 1 restituisce 1 altrimenti 0[/LIST][LIST]|| : OR logico --> Confronta i singoli bit dell'operando di sinistra con i singoli bit dell'operando di destra. Se i bit sono entrambi 0 restituisce 0 altrimenti 1[/LIST][LIST]! : NOT logico --> Questo viene definito operatore "unario" in quanto accetta solo un operando posto alla destra dell'operatore. In pratica inverte il valore di ogni singolo bit dell'operando.[/LIST]
Esistono anche altri operatori oltre a questi presentati, ma per il momento è meglio che impariate solamente questi e soprattutto ne capiate il funzionamento.
Prima di finire con questa quarta lezione voglio specificare che gli operandi di un'operazione possono essere sia numerici che variabili. Chiaramente, nel caso di variabili, si presuppone che siano variabili numeriche e possibilmente dello stesso tipo (anche se, come vedremo più avanti, ci possono essere le dovute accezioni).
Con questo è tutto, vi aspetto alla quinta lezione dove cominceremo a vedere come combinare questi operatori all'interno di strutture di controllo
Per quanto riguarda il primo tipo, in C è possibile eseguire qualsiasi tipo di operazione matematica. Per farlo, ci si avvale di operatori messi a disposizione dal linguaggio, e da funzioni di libreria. Esistono 5 operatori semplici che permettono di eseguire altrettante operazioni matematiche, e sono definiti attraverso simboli. Questi operatori vengono definiti "binari" in quanto accettano due parametri, uno posto alla sinistra del simbolo, ed uno posto alla sua destra, eseguendo l'operazione preposta tra questi due.
[LIST]+ --> Esegue l'addizione tra i due parametri[/LIST][LIST]- --> Esegue la sottrazione tra i due parametri[/LIST][LIST]* --> Esegue la moltiplicazione tra i due parametri[/LIST][LIST]/ --> Esegue la divisione tra i due parametri[/LIST][LIST]% --> Esegue la divisione tra i due parametri e dà come risultato il resto di quest'ultima.[/LIST]
Quando si esegue un'operazione matematica con uno dei cinque operatori presentati, si ha un risultato. Questo risultato, però, per poter essere consultato ed utilizzato successivamente, deve essere salvato in una variabile, altrimenti, una volta proseguiti oltre nel programma, non si avà più modo di fare riferimento ad esso. Nella scorsa lezione abbiamo visto che per assegnare un valore ad una variabile si utilizza l'operatore "=".
Facciamo un esempio: abbiamo una variabile chiamata "risultato" di tipo int a cui dobbiamo assegnare la somma del valore 4 con il valore 6. Possiamo scrivere:
int risultato;
risultato = 4 + 6;
Questa scrittura poteva essere eseguita su un'unica riga di codice:
int risultato = 4 + 6;
Ricordatevi che gli assegnamenti vanno letti sempre da destra verso sinistra quindi quando è presente il simbolo uguale prima viene risolto ciò che sta alla sua destra, poi viene risolto l'operando di sinistra e quindi a quest'ultimo gli viene assegnato ciò che è rimasto presente alla destra dell'operatore. Quindi nel nostro esempio quello che succede è questo: viene eseguita la somma tra 4 e 6 ed il risultato 10 viene tenuto sospeso in memoria (in realtà il risultato viene tenuto in un registro della CPU, ma è meglio non pensare a questo, almeno all'inizio!), dopodichè viene dichiarata una variabile di nome risultato e di tipo int e a questa viene assegnato il risultato totale (nel nostro caso 10)
Gli operatori possono essere anche combinati tra di loro, quindi si potrebbe avere una situazione di questo tipo:
risultato = 10 + 24 - 8 * 2 + 20 / 10;
Nel caso in cui si abbia la necessità di combinare più operatori va detto che ci sono delle regole di precedenza da seguire e cioè:
1) Il simbolo * ,il simbolo / ed il simbolo % vengono prima del simbolo + e del simbolo -
2) Vengono eseguite prima le operazioni indicate tra parentesi proseguendo dalla parentesi più interna verso quella più esterna
3) L'assegnamento viene eseguito come ultima operazione.
In realtà questi livelli di precedenza indicano la priorità di come il compilatore valuterà le singole operazioni da compiere all'interno dell'espressione, e ricalca per certi versi, le priorità che vengono date anche nella vita reale, quando ci si trova a dover svolgere un'espressione complessa.
Detto questo, riprendendo l'esempio posto sopra, il compilatore divide l'espressione nei seguenti passi:
1) Esegue prima la moltiplicazione (8 * 2) e si riporta ad una situazione del genere: risultato = 10 + 24 - 16 + 20 / 10;
2) Esegue la divisione (20 / 10) ottenendo: risultato = 10 + 24 - 16 + 2;
3) Esegue la somma (10 + 24) ottenendo: risultato = 34 - 16 + 2;
4) Esegue la sottrazione (34 - 16) ottenendo: risultato = 18 + 2;
5) Esegue la somma (18 + 2) ottenendo: risultato = 20;
6) Assegna il valore 20 alla variabile risultato
Sono possibili anche altre operazioni di tipo matematico in C, ma in questo caso vanno utilizzate le apposite funzioni di libreria. Ad esempio, se volessimo eseguire l'elevamento a potenza di un numero dovremo necessariamente utilizzare la funzione pow: questa funzione richiede due parametri, il numero da elevare e l'esponente e dà come risultato un valore di tipo long che rappresenta, appunto, l'elevamento a potenza.
Tutte le funzioni matematiche si trovano all'interno della libreria <math.h>
Oltre alle operazioni matematiche, è possibile effettuare sui dati, anche operazioni di natura diversa. Queste possono essere operazioni di confronto (dette anche di relazione) oppure operazioni di mascheratura (dette anche operazioni logiche). Le operazioni di confronto danno come risultato true (vero) oppure false (falso) a seconda degli operandi coinvolti e del tipo di operatore utilizzato, mentre nel caso degli operatori bit a bit essi restituiscono un nuovo dato ottenuto dall'unione logica dei due operandi (vedremo tra poco che cosa intendo)
Vediamo quali sono gli operatori che il C ci mette a disposizione:
Operatori di relazione (sono tutti operatori binari):
[LIST]< : Minore di --> Restituisce true se l'operando di sinistra risulta minore rispetto l'operando di destra altrimenti restituisce false[/LIST][LIST]> : Maggiore di --> Restituisce true se l'operando di sinistra risulta maggiore rispetto l'operando di destra altrimenti restituisce false[/LIST][LIST]<= : Minore o uguale di --> Restituisce true se l'operando di sinistra risulta minore o uguale rispetto l'operando di destra altrimenti restituisce false[/LIST][LIST]>= : Maggiore o uguale di --> Restituisce true se l'operando di sinistra risulta maggiore o uguale rispetto l'operando di destra altrimenti restituisce false[/LIST][LIST]== : Uguale a --> Restituisce true se entrambi gli operandi risultano essere identici altrimenti restituisce false[/LIST][LIST]!= : Diverso da --> Restituisce true se i due operandi sono diversi altrimenti restituisce false[/LIST]
I confronti eseguiti tramite gli operatori di relazione sono effettuati da sinistra verso destra
Esempi:
5 < 4 : false
10 >= 12 : false
4 == 4 : true
14 <= 20 : true
20 != 20 : false
Gli operandi possono essere anche espressioni numeriche:
(5 + 10) < (10 + 2) : false
10 * 2 - 8 >= 2 : true
23 + 44 - (8 * 2) == 50 + 2 - 1 : true
Operatori logici:
[LIST]&& : AND logico --> Confronta i singoli bit dell'operando di sinistra con i singoli bit dell'operando di destra. Se i bit sono entrambi 1 restituisce 1 altrimenti 0[/LIST][LIST]|| : OR logico --> Confronta i singoli bit dell'operando di sinistra con i singoli bit dell'operando di destra. Se i bit sono entrambi 0 restituisce 0 altrimenti 1[/LIST][LIST]! : NOT logico --> Questo viene definito operatore "unario" in quanto accetta solo un operando posto alla destra dell'operatore. In pratica inverte il valore di ogni singolo bit dell'operando.[/LIST]
Esistono anche altri operatori oltre a questi presentati, ma per il momento è meglio che impariate solamente questi e soprattutto ne capiate il funzionamento.
Prima di finire con questa quarta lezione voglio specificare che gli operandi di un'operazione possono essere sia numerici che variabili. Chiaramente, nel caso di variabili, si presuppone che siano variabili numeriche e possibilmente dello stesso tipo (anche se, come vedremo più avanti, ci possono essere le dovute accezioni).
Con questo è tutto, vi aspetto alla quinta lezione dove cominceremo a vedere come combinare questi operatori all'interno di strutture di controllo