Skip to content

Operatori Aritmetici e Relazionali

I classici operatori moltiplicativi (*, /, %) e additivi (+, -) si comportano in modo simile all’algebra tradizionale, ma con alcune peculiarità in C.

Quando dividi due interi, il C esegue una “divisione troncata verso lo zero”, scartando i decimali (la parte frazionaria viene troncata).

int a = 10 / 3; // a = 3
int b = -10 / 3; // b = -3

L’operatore modulo (%) restituisce il resto della divisione intera. In C, il segno del risultato del modulo è sempre uguale a quello del dividendo (il numero a sinistra):

int x = 10 % 3; // x = 1
int y = -10 % 3; // y = -1

Gli operatori di disuguaglianza (<, <=, >, >=) e di uguaglianza (==, !=) restituiscono sempre un intero: 1 se vero, 0 se falso.

In matematica, per verificare se un numero è compreso tra due estremi si scrive 0 < a < 10. In C, scrivere questo è un errore logico gravissimo.

Gli operatori si raggruppano da sinistra a destra. L’espressione 0 < a < 10 viene valutata come (0 < a) < 10.

  1. Se a è 5, 0 < 5 è vero, quindi restituisce 1. Poi il C calcola 1 < 10, che è vero.
  2. Ma se a è 50! 0 < 50 è vero, quindi restituisce 1. Poi il C calcola 1 < 10… che è ancora vero!

Per combinare i confronti, devi sempre usare gli operatori logici.

Il codice seguente ha un bug! Tenta di verificare se b è strettamente compreso tra a e c, ma usa la sintassi errata a < b < c. Correggilo separando le condizioni con un AND logico (&&). L’espressione corretta è: “Se a è minore di b E b è minore di c”.