Barninga Z
a- a+

Gli operatori

Come tutti i linguaggi di programmazione, il C dispone di uninsieme di operatori, cioè di simboli cherappresentano particolari operazioni sul valore di un dato(che viene comunemente detto operando). 

Alcuni operatori C sono perfettamente equivalenti a quelliomologhi di altri linguaggi, altri sono peculiari; tuttavia,prima di esaminarne le principali caratteristiche, èbene chiarire il significato di due concetti:precedenza e associatività

Quando un operatore agisce su più operandi o inun'espressione sono definite più operazioni, taliconcetti assumono notevole importanza, perchéconsentono di interpretare correttamente l'espressionestessa, stabilendo quali operazioni devono essere effettuateprima delle altre. Consideriamo, quale esempio, unasomma: 

a = b + c;

Nell'espressione sono presenti due operatori:l'uguale (operatore di assegnamento) ed il"più" (operatore di somma). E' facilecomprendere che l'espressione ha significato solo seviene dapprima calcolata la somma dei valori contenuti inb e c, e solo successivamente il risultatoè assegnato ad a. Possiamo dire che laprecedenza dell'operatore di assegnamentoè minore di quella dell'operatore disomma. 

Consideriamo ora una serie di assegnamenti: 

a = b = c = d;

Il compilatore C la esegue assegnando il valore di da c; poi il valore di c a b;infine, il valore di b ad a. Il risultatoè che il valore di d è assegnato incascata alle altre variabili; in pratica, chel'espressione è stata valutata da destra asinistra, cioè che l'operatore di assegnamentogode di associatività da destra a sinistra. 

In altre parole, la precedenza si riferisce all'ordinein cui il compilatore valuta gli operatori, mentrel'associatività concerne l'ordine in cui sonovalutati operatori aventi la stessa precedenza (non èdetto che l'ordine sia sempre da destra asinistra). 

Le parentesi tonde possono essere sempre utilizzate perdefinire parti di espressioni da valutare prima deglioperatori che si trovano all'esterno delle parentesi.Inoltre, quando vi sono parentesi tonde annidate, vale laregola che la prima parentesi chiusa incontrata si accoppiacon l'ultima aperta e che vengono sempre valutate perprime le operazioni più interne. Così, adesempio, l'espressione 

a = 5 * (a + b / (c - 2));

è valutata come segue: dapprima è calcolata ladifferenza tra c e 2, poi viene effettuatala divisione di b per tale differenza. Il risultatoè sommato ad a ed il valore ottenuto èmoltiplicato per 5. Il prodotto, infine, èassegnato ad a. In assenza delle parentesi ilcompilatore avrebbe agito in maniera differente,infatti: 

a = 5 * a + b / c - 2;

è valutata sommando il prodotto di a e5 al quoziente di b diviso per c;al risultato è sottratto 2 ed il valorecosì ottenuto viene assegnato ad a

Vale la pena di presentare l'insieme degli operatori C,riassumendone in una tabella le regole di precedenza edassociatività; gli operatori sono elencati in ordinedi precedenza decrescente. 

OPERATORI C 

Operatore
Descrizione
Associatività
() chiamata di funzione  da sx a dx
[] indici di array   
. appartenenza a struttura   
-> appartenenza a struttura refernziata da puntatore   
! NOT logico  da dx a sx
~ complemento a uno   
- meno unario (negazione)   
++ autoincremento   
-- autodecremento   
& indirizzo di   
* indirezione   
(tipo)  cast (conversione di tipo)   
sizeof() dimensione di   
* moltiplicazione  da sx a dx
/ divisione   
% resto di divisione intera   
+ addizione  da sx a dx
- sottrazione   
<< scorrimento a sinistra di bit  da sx a dx
>> scorrimento a destra di bit   
< minore di  da sx a dx
<= minore o uguale a   
> maggiore di   
>= maggiore o uguale a   
== uguale a  da sx a dx
!= diverso da (NOT uguale a)   
& AND su bit  da sx a dx
^ XOR su bit  da sx a dx
| OR su bit  da sx a dx
&& AND logico  da sx a dx
|| OR logico  da sx a dx
? : espressione condizionale  da dx a sx
=, etc. operatori di assegnamento(semplice e composti)  da dx a sx
, virgola (separatore diespressioni da sx a dx

Come si vede, alcuni operatori possono assumere significatidiversi. Il loro modo di agire sugli operandi è quinditalvolta desumibile senza ambiguità solo conoscendo ilcontesto di azione, cioè le specifiche espressioni incui sono utilizzati. Di seguito è fornita unadescrizione dettagliata degli operatori di cui ancora non siè detto in precedenza, elencati in ordine diprecedenza decrescente, come da tabella, ma, al tempo stesso,raggruppati per analogia di significato. 

 



Ti potrebbe interessare anche

commenta la notizia