Operatori Aritmetici in Java

Concetti Chiave
  • Gli operatori aritmetici in Java sono utilizzati per eseguire operazioni matematiche di base come addizione, sottrazione, moltiplicazione e divisione.
  • Gli operatori di assegnazione aritmetica composta permettono di combinare operazioni aritmetiche con assegnazioni, semplificando il codice.
  • Gli operatori di incremento e decremento (++ e --) possono essere utilizzati in forma prefissa o postfissa, influenzando il valore dell'operando in modi diversi.

Operatore di Assegnamento

L'operatore di assegnazione è il singolo segno di uguale, =. In Java funziona pressappoco come in qualsiasi altro linguaggio di programmazione e assume la forma generale:

var = espressione;

Qui il tipo di var deve essere compatibile con il tipo di espressione.

L'operatore di assegnazione possiede un attributo interessante che potrebbe non essere familiare: consente di creare una catena di assegnazioni. Per esempio, si consideri il seguente frammento:

int x, y, z;

x = y = z = 100; // assegna a x, y e z il valore 100

Questo frammento imposta le variabili x, y e z a 100 mediante una sola istruzione. Ciò avviene perché = è un operatore che restituisce il valore dell'espressione posta a destra. Di conseguenza, il valore di z = 100 è 100, che viene quindi assegnato a y e, a sua volta, a x. Utilizzare una «catena di assegnazioni» è un metodo semplice per attribuire a un insieme di variabili un valore comune.

Operatori aritmetici

Gli operatori aritmetici sono utilizzati nelle espressioni matematiche nello stesso modo in cui vengono utilizzati in algebra. La tabella seguente elenca gli operatori aritmetici:

Operatore Risultato
+ Addizione (anche più unario)
Sottrazione (anche meno unario)
* Moltiplicazione
/ Divisione
% Modulo
++ Incremento
+= Assegnazione con addizione
–= Assegnazione con sottrazione
*= Assegnazione con moltiplicazione
/= Assegnazione con divisione
%= Assegnazione con modulo
–– Decremento
Tabella 1: Operatori Aritmetici in Java

Gli operandi degli operatori aritmetici devono essere di tipo numerico. Non è possibile utilizzarli sui tipi boolean, ma è possibile utilizzarli sui tipi char, poiché il tipo char in Java è, in sostanza, un sottoinsieme di int.

Gli operatori aritmetici di base

Le operazioni aritmetiche di base, addizione, sottrazione, moltiplicazione e divisione, si comportano come previsto per tutti i tipi numerici.

L'operatore unario meno nega il proprio operando, mentre l'operatore unario più restituisce semplicemente il valore del suo operando. Quando l'operatore di divisione è applicato a un tipo intero, il risultato non conterrà la parte frazionaria.

Il seguente semplice programma di esempio dimostra gli operatori aritmetici e la differenza tra la divisione in virgola mobile e quella intera.

// Dimostrazione degli operatori aritmetici di base.
class MatematicaBase {
    public static void main(String[] args) {
        // aritmetica con interi
        System.out.println("Aritmetica intera");
        int a = 1 + 1;
        int b = a * 3;
        int c = b / 4;
        int d = c - a;
        int e = -d;
        System.out.println("a = " + a);
        System.out.println("b = " + b);
        System.out.println("c = " + c);
        System.out.println("d = " + d);
        System.out.println("e = " + e);

        // aritmetica con double
        System.out.println("\nAritmetica in virgola mobile");
        double da = 1 + 1;
        double db = da * 3;
        double dc = db / 4;
        double dd = dc - a;
        double de = -dd;
        System.out.println("da = " + da);
        System.out.println("db = " + db);
        System.out.println("dc = " + dc);
        System.out.println("dd = " + dd);
        System.out.println("de = " + de);
    }
}

Eseguendo questo programma, verrà prodotto il seguente output:

Aritmetica intera
a = 2
b = 6
c = 1
d = -1
e = 1

Aritmetica in virgola mobile
da = 2.0
db = 6.0
dc = 1.5
dd = -0.5
de = 0.5

L'operatore modulo

L'operatore di modulo, %, restituisce il resto di un'operazione di divisione. Può essere applicato sia ai tipi in virgola mobile sia ai tipi interi. Il programma di esempio seguente dimostra l'uso di %:

// Dimostrazione dell'operatore %.
class Modulo {
    public static void main(String[] args) {
        int x = 42;
        double y = 42.25;

        System.out.println("x mod 10 = " + x % 10);
        System.out.println("y mod 10 = " + y % 10);
    }
}

Eseguendo questo programma, verrà prodotto il seguente output:

x mod 10 = 2
y mod 10 = 2.25

Operatori di assegnazione aritmetica composta

Java mette a disposizione operatori speciali che consentono di combinare un'operazione aritmetica con un'assegnazione. Come noto, istruzioni come la seguente sono piuttosto comuni in programmazione:

a = a + 4;

In Java, tale istruzione può essere riscritta così:

a += 4;

Questa versione utilizza l'operatore di assegnazione composta +=. Entrambe le istruzioni eseguono la stessa azione: aumentano il valore di a di 4.

Ecco un altro esempio:

a = a % 2;

che può essere espresso come

a %= 2;

In questo caso, %=̀ ottiene il resto di a / 2 e inserisce il risultato in a.

Esistono operatori di assegnazione composta per tutti gli operatori binari aritmetici; quindi qualunque istruzione della forma

var = var op espressione;

può essere riscritta come

var op= espressione;

Gli operatori di assegnazione composta offrono due vantaggi: riducono la digitazione, fungendo da “abbreviazione” delle forme lunghe equivalenti, e in alcuni casi risultano più efficienti. Per questi motivi, nei programmi Java professionali compaiono spesso tali operatori.

Segue un programma di esempio che mostra diverse assegnazioni op= in azione:

// Dimostrazione di diversi operatori di assegnazione.
class UgualeOp {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int c = 3;

        a += 5;
        b *= 4;
        c += a * b;
        c %= 6;

        System.out.println("a = " + a);
        System.out.println("b = " + b);
        System.out.println("c = " + c);
    }
}

Output del programma:

a = 6
b = 8
c = 3

Incremento e decremento

Gli operatori ++ e -- sono gli operatori di incremento e decremento di Java. L'operatore di incremento aumenta di uno il proprio operando, mentre l'operatore di decremento lo diminuisce di uno. Ad esempio, l'istruzione

x = x + 1;

può essere riscritta mediante l'operatore di incremento:

x++;

Analogamente, l'istruzione

x = x - 1;

è equivalente a

x--;

Questi operatori possono apparire sia in forma postfissa (dopo l'operando) sia in forma prefissa (prima dell'operando). Se fanno parte di un'espressione più ampia, le due forme si comportano diversamente.

Nella forma prefissa l'operando viene modificato prima che il valore venga usato nell'espressione:

x = 42;
y = ++x;  // y diventa 43

Questa istruzione equivale a:

x = x + 1;
y = x;

Nella forma postfissa il valore originale viene usato nell'espressione prima della modifica:

x = 42;
y = x++;  // y vale 42, poi x diventa 43

Questa istruzione equivale a:

y = x;
x = x + 1;

Il programma seguente illustra l'operatore di incremento:

// Dimostrazione di ++.
class IncDec {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int c;
        int d;

        c = ++b;   // b diventa 3, c riceve 3
        d = a++;   // d riceve 1, poi a diventa 2

        System.out.println("a = " + a);
        System.out.println("b = " + b);
        System.out.println("c = " + c);
        System.out.println("d = " + d);
    }
}

Output del programma:

a = 2
b = 3
c = 4
d = 1