Barninga Z
a- a+

Gli operatori

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

Alcuni operatori C sono perfettamente equivalenti a quelli omologhi 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 in un'espressione sono definite più operazioni, tali concetti assumono notevole importanza, perché consentono di interpretare correttamente l'espressione stessa, stabilendo quali operazioni devono essere effettuate prima delle altre. Consideriamo, quale esempio, una somma: 

a = b + c;

Nell'espressione sono presenti due operatori: l'uguale (operatore di assegnamento) ed il "più" (operatore di somma). E' facile comprendere che l'espressione ha significato solo se viene dapprima calcolata la somma dei valori contenuti in b e c, e solo successivamente il risultato è assegnato ad a. Possiamo dire che la precedenza dell'operatore di assegnamento è minore di quella dell'operatore di somma. 

Consideriamo ora una serie di assegnamenti: 

a = b = c = d;

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

In altre parole, la precedenza si riferisce all'ordine in cui il compilatore valuta gli operatori, mentre l'associatività concerne l'ordine in cui sono valutati operatori aventi la stessa precedenza (non è detto che l'ordine sia sempre da destra a sinistra). 

Le parentesi tonde possono essere sempre utilizzate per definire parti di espressioni da valutare prima degli operatori che si trovano all'esterno delle parentesi. Inoltre, quando vi sono parentesi tonde annidate, vale la regola che la prima parentesi chiusa incontrata si accoppia con l'ultima aperta e che vengono sempre valutate per prime le operazioni più interne. Così, ad esempio, l'espressione 

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

è valutata come segue: dapprima è calcolata la differenza tra c e 2, poi viene effettuata la 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 il compilatore avrebbe agito in maniera differente, infatti: 

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

è valutata sommando il prodotto di a e 5 al quoziente di b diviso per c; al risultato è sottratto 2 ed il valore così ottenuto viene assegnato ad a

Vale la pena di presentare l'insieme degli operatori C, riassumendone in una tabella le regole di precedenza ed associatività; gli operatori sono elencati in ordine di 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 di espressioni da sx a dx

Come si vede, alcuni operatori possono assumere significati diversi. Il loro modo di agire sugli operandi è quindi talvolta desumibile senza ambiguità solo conoscendo il contesto di azione, cioè le specifiche espressioni in cui sono utilizzati. Di seguito è fornita una descrizione dettagliata degli operatori di cui ancora non si è detto in precedenza, elencati in ordine di precedenza decrescente, come da tabella, ma, al tempo stesso, raggruppati per analogia di significato. 

 



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Graziano
Hai qualche domanda da fare?