Sei sulla pagina 1di 11

VOL_1 / UNITA’_2 / MOD_2

GLI OPERATORI

[1.2.24]

Gli operatori sono particelle binarie che stabiliscono una relazione tra due variabili e consentono di
manipolare e controllare i dati del programma. La loro struttura in generale è:

espressione_1 = espressione_2 operatore espressione_3;

Gli operatori del C sono:

 OPERATORI ARITMETICI
 OPERATORE di ASSEGNAZIONE
 OPERATORI RELAZIONALI (o di relazione)
 OPERATORI bit a bit
 OPERATORI LOGICI

1
OPERATORI ARITMETICI

simbolo significato
+ Addizione
- Sottrazione
* Moltiplicazione
/ Divisione
% Modulo (resto della divisione tra interi)

Il loro uso è semplice e intuitivo, tuttavia è possibile sperimentare direttamente il loro uso attraverso poche
righe di codice.

Dichiarare tre variabili intere e provare a combinare tutte le operazioni.

le istruzioni da 7 a 11 rappresentano una semplice tecnica per acquisire un dato da tastiera.


Saranno spiegate in modo dettagliato nella sezione “INPUT E OUTPUT DI DATI SEMPLICI”.

2
OPERATORE di ASSEGNAZIONE

simbolo significato
= Assegnazione

Il significato del simbolo = è leggermente diverso da quello matematico.

In matematica scrivere a=b+c significa che il valore di a corrisponde alla somma tra b e c.

Nel linguaggio C l’operatore (=) viene declinato nel seguente modo: “assegna alla variabile a il risultato della
somma tra in contenuto della variabile b con il contenuto della variabile c”.

Pertanto prima viene computata la somma tra b e c poi viene eseguita l’assegnazione del risultato nella
variabile a.

ivalue e rvalue

Particolarmente interessante è e utile per mostrare come sono organizzati i dati nella memoria del
calcolatore è l’utilizzo delle due particelle ivalue e rvalue. Rappresentano rispettivamente lvalue
(left value) l’indirizzo di memoria di una variabile e rvalue (right valute) il suo contenuto.

Pertanto ogni variabile è identificata attraverso due indirizzi ben definiti: uno è quello che identifica la
variabile, l’altro è il suo contenuto.

Si prenda in esame scrivendolo il seguente codice:

Provare ora a cambiare il valore degli addendi….

3
Si può verificare che è cambiato il rvalue mentre è rimasto invariato il lvalue, l’indirizzo delle variabili.

Si tornerà sull’argomento quando si tratterà della visibilità delle variabili nelle funzioni.

4
OPERATORI RELAZIONALI (o di relazione)

Stabiliscono una relazione tra due variabili restituendo un valore logico (vero o falso).

simbolo significato
> Maggiore di…
< Minore di …
== Uguale a …
>= Maggiore o uguale a…
<= Minore o uguale a …
!= Non uguale a….

La relazione è stabilita sintatticamente nella forma:

espressione_a operatore espressione_b

Il compilatore declina l’istruzione nel seguente modo “…se l’espressione_a è vero che <relazione> all’
espressione_b, restituisci un valore vero, in caso contrario il risultato è falso”.

L’utilizzo degli operatori di relazione sarà messo in evidenza a breve attraverso le strutture di controllo
condizionali e iterative.

5
OPERATORI ORIENTATI AI BIT

Stabiliscono la relazione logico binaria tra i singoli bit di due variabili.

simbolo significato
& AND
| OR
^ XOR
<< SCORRIMENTO A SX
>> SCORRIMENTO A DX
~1 NOT

Si mostra il significato di alcuni operatori attraverso un semplicismo quanto significativo programma.

Si prendano due variabili (unsigned char) uc_A=152 e uc_B=95 .

La loro struttura binaria in un 1 byte è la seguente:

variabile msb lsb


uc_A B7 B6 B5 B4 B3 B2 B1 B0
152 1 0 0 1 1 0 0 0

variabile msb lsb


uc_B B7 B6 B5 B4 B3 B2 B1 B0
95 0 1 0 1 1 1 1 1

Effettuare delle operazioni bit a bit significa mettere in relazione logica i singoli bit tra di loro.

Supponendo di procedere con un operatore AND, si mette in relazione logica AND ciascu bit della prima
variabile con il bit dello stesso peso della seconda:

bit_n-esimo della variabile A bit_n-esimo della variabile B bit_n-esimo della variabile C


0 0 0
0 1 0
1 0 0
1 1 1

Il risultato complessivo sarà una variabile in cui ciascun bit è determinato dal risultato logico AND dei bit
delle due precedenti variabili.

1
Per la tilde (~) digitare alt+126
6
Procedendo con l’esempio …

uc_A B7 B6 B5 B4 B3 B2 B1 B0
152 1 0 0 1 1 0 0 0
uc_B B7 B6 B5 B4 B3 B2 B1 B0
95 0 1 0 1 1 1 1 1
uc_C B7 B6 B5 B4 B3 B2 B1 B0
24 0 0 0 1 1 0 0 0

L’unico bit a 1 della variabile uc_C risulta quello in cui sono entrambi a 1 i due corrispondenti bit delle
variabili in AND.

Si può facilmente verificare allo stesso modo con gli operatori OR e XOR.

7
Gli operatori di scorrimento consentono di spostare a destra (>>) o a sinistra (<<) i bit di una variabile. Il
significato è piuttosto semplice:

Scorrimento a destra ….

Ad ogni scorrimento di 1 bit, il contenuto del B7 viene rimpiazzato da uno 0 e il suo contenuto passa al B6 e,
e così via fino all’ultimo bit che viene perso.

B7 B6 B5 B4 B3 B2 B1 B0
1 0 0 1 1 0 0 1

B7 B6 B5 B4 B3 B2 B1 B0
0 1 0 0 1 1 0 0

8
Scorrimento a sinistra ….

Ad ogni scorrimento di 1 bit, il contenuto del B0 viene rimpiazzato da uno 0 e il suo contenuto passa al
passa al B1 e così via fino al primo l’ultimo bit che viene perso.

B7 B6 B5 B4 B3 B2 B1 B0
1 0 0 1 1 0 0 1

B7 B6 B5 B4 B3 B2 B1 B0
0 0 1 1 0 0 1 0

9
L’operatore NOT inverte i bit di una variabile.

Ad esempio:

sia uc_C=24 <0001 1000> scrivere uc_C= ~uc_C; significa che uc_C diventa <1110 0111> ossia 231

10
OPERATORI LOGICI

Il C mette a disposizioni operatori che stabiliscono una relazione logica tra espressioni.

simbolo significato
&& AND
|| OR
! NOT

La differenza tra gli operatori logici orientati ai bit e questi è che i primi stabiliscono una relazione tra ogni
bit del valore numerico, in questo caso sull’intero dato.

Il loro uso è prevalente nelle strutture di controllo.

11

Potrebbero piacerti anche