Tutorial Programmazione C - Approfondimento Operatori
 

Buongiorno a tutti,


in questo articolo approfondiamo l'argomento Operatori cercando di trattare l'argomento in maniera completa ed esaustiva.


Possiamo considerare un operatore come un'istruzione del linguaggio di programmazione, che lavora sulle variabili, o più in generale sui dati e ci restituisce un valore. Ci sono però parecchi operandi ed ognuno si comporta in maniera differente.

Affrontiamo gli operatori per categoria, cominciando da quelli più semplici, cioè quelli aritmetici



Operatori Matematici

Si tratta dei semplici operatori utilizzati nell'aritmetica.



somma = a + b;

sottrazione = a - b;

moltiplicazione = a * b;

divisione = a / b;

modulo = a % b;



Credo il significato dei vari operatori sia più che chiaro, ad eccezione solamente dell'operatore modulo ('%') il quale ci restituisce il resto della divisione tra numeri interi.

Un'ulteriore precisazione è doverosa per quanto concerne la divisione tra numeri interi, in C, infatti, la divisione tra numeri interi da sempre un risultato troncato, vale a dire arrotondato SEMPRE per difetto, eliminando semplicemente la parte decimale.


Sono considerabili operatori aritmetici anche gli operatori di incremento e decremento:



a++;//incremento

a--;//decremento



Questi operatori sono detti operatori unari, in quanto lavorano su un solo operando, aumentandone o decrementandone il valore di 1.


Gli operatori di incremento e decremento possono essere usati in due modi, posti prima dell'operando oppure dopo. Quando li si utilizza solamente allo scopo di modificare il valore dell'operando non c'è alcuna differenza nell'ordine in cui vengono utilizzati:

a++ e ++a portano alle medesime conseguenze, incrementare il valore della variabile.

La differenza emerge solamente quando si utilizzano questi operatori in combinazione con un operatore di assegnazione, ad esempio:



risultato = a++;

risultato = ++a;

la differenza sta nell'ordine in cui vengono eseguite le operazioni, nel primo caso, quello in cui l'operatore è posto dopo la variabile, viene immagazzinato all'interno della variabile risultato il valore di a e in seguito il valore di a viene aumentato di 1; quindi dopo che la riga di codice è stata eseguite risultato assume il vecchio valore di a, ed a sarà uguale a risultato + 1.

Nel secondo caso invece viene prima incrementato il valore di a ed in seguito copiato questo valore all'interno della variabile risultato, di conseguenza, una volta eseguita la riga di codice, le due variabili avranno lo stesso valore.


Fanno sempre parte degli operatori matematici gli operatori detti bitwise, che lavorano direttamente sui bit che rappresentano il valore contenuto nella variabile, una spiegazione approfondita della rappresentazione delle varie in codice binario va oltre gli scopi di questo articolo, vi consiglio

questo articolo

se volete approfondire.


Gli operatori bitwise sono i seguenti:



a = ~a complementa tutti i bit

a = b

<

< c sposta i bits di b a sinistra per un numero di bits pari a c

a = b >> c sposta i bits di b a destra per un numero di bits pari a c

a = b & c b AND c

a = b ^ c b XOR c

a = b | c b OR c



Infine C permette di utilizzare delle scorciatoie nei casi in cui si vuole assegnare ad una variabile il valore restituito da un'operazione tra quella stessa variabile ed un'altra (o un letterale). Un esempio chiarirà senz'altro meglio il concetto.



Supponiamo che io voglia prendere il valore di a, sommare a questo valore il valore di b e memorizzare il risultato all'interno della variabile a. La forma completa di questa operazione sarebbe la seguente:



a = a + b;



C mi permette di ottenere lo stesso risultato attraverso la seguente scorciatoia:



a += b;



Di seguito l'elenco completo delle scorciatoie



a = a + b a += b

a = a - b a -= b

a = a * b a *= b

a = a / b a /= b

a = a % b a %= b

a = a

<< b a <

<= b

a = a >> b a >>= b

a = a & b a &= b

a = a ^ b a ^= b

a = a | b a |= b




Operatori Relazionali

Gli operatori relazionali vengono utilizzati per confrontare il valore di due variabili e restituiscono un valore di tipo booleano, cioè vero o falso, rappresentati in C dai valori 1 e 0.



a == b uguale

a != b diverso

a

< b minore

a > b maggiore

a

<= b minore o uguale

a >= b maggiore o uguale



Tra gli operatori relazionali si annovera anche il criptico operatore ternario, che includo in questo articolo per completezza, ma il cui uso sconsiglio in quanto poco chiaro e di conseguenza rende il codice poco leggibile.


risultato = (x > 5) ? a : b;


Come funziona? come un costrutto if-else: se x > 5 all'interno della variabile 'risultato' sarà immagazzinato il valore di a, in caso contrario il valore di b.



Operatori logici

Gli operatori della logica vengono utilizzati per costruire espressioni abbinando più operazioni relazionali. Esistono, in C, tre operatori logici:


! NOT

&& AND

|| OR



come funzionano?

NOT inverte il valore restituito dall'operazione relazionale, ad esempio !(a>b) restituirà vero se a non è maggiore di b e falso in caso contrario

AND collega due operazioni relazionali e restituisce vero solamente se entrambe risultano vere, falso in caso contrario, ad esempio (a > b) && (a < c) restituisce vero solamente se a è allo stesso tempo maggiore di b e minore di c, falso in tutti gli altri casi.

OR collega due operazioni relazionali e restituisce verso se almeno una delle due risulta vera, restituisce quindi falso solamente nel caso in cui entrambe siano fale, ad esempio (a>b) && (a<c) restituisce falso solamente se a non è maggiore di b e a è meggiore di c, in tutti gli altri casi restituisce vero.


Operatore sizeof()

L'operatore sizeof() è un operatore molto particolare, gli si può dare come argomento un tipo di dato oppure il nome di una variabile e l'operatore ci restituisce un numero intero che indica il numero di byte che la variabile o quel tipo di dato occupa in memoria.

Tier Benefits
Pledge $1 or more per month
2 patrons
[ITA]
Grazie grazie grazie!
Verrai inserito nella lista dei ringraziamenti sulla mia pagina facebook e sul mio blog! Contattami attraverso il blog!

[ENG]
Thank You, thank You, thank You!
I'll add you to my blog's thanks list!
Pledge $10 or more per month
0 of 10 patrons
[ITA]
Grazie, grazie, grazie
Oltre ad essere incluso nei ringraziamenti sul mio blog accanto al tuo nome posteró anche il link al tuo sito web o alla tua pagina personale
[ENG]
Thank You, thank You, thank You
I'll publish your website on my blog
Pledge $30 or more per month
0 patrons
This is a special reward for those patron who aren't italian, i'll make 1 tutorial per month in English
Pledge $50 or more per month
0 patrons
[ITA]
Grazie Grazie Grazie!
Potrai scegliere a quale tutorial apparterrà uno degli episodi che verrà pubblicato ogni settimana

[ENG]
Thank You, thank You, thank You!
You'll choose the subject of one of the weekly tutorials!
Pledge $80 or more per month
0 patrons
[ITA]
Grazie grazie grazie!
Ovviamente tutti i reward precedenti.
Riceverai a casa il mio kit per il rangefinder portatile, completo di istruzioni per il montaggio!

[ENG]
Thank You, thank You, thank You!
Of course all the previous rewards!
You'll get my portable rangefinder at home, with all the istruction to build it!
Pledge $100 or more per month
0 of 3 patrons
[ITA]
Grazie Grazie Grazie!
Potrai scegliere un linguaggio di programmazione su cui vuoi che venga realizzato un tutorial e io realizzerò un episodio alla settimana!

[ENG]
Thank You, thank You, thank You!
Of course all the previous rewards!
You'll be able to choose a new subject on wich make a tutorial series!
Recent Posts