Overflow aritmetico
# Overflow aritmetico

Un overflow aritmetico è un problema relativo alle operazioni eseguite sui numeri da un calcolatore. Il problema è dovuto all'impossibilità dei calcolatori di memorizzare numeri di dimensione arbitrariamente grande. Esso si verifica quando il risultato di un'operazione tra numeri eccede il valore massimo rappresentabile con n bit fissati a disposizione in memoria.

## Descrizione

Ogni bit, per definizione, può assumere in modo esclusivo i valori 1 e 0; con n bit a disposizione, possiamo memorizzare un valore massimo pari a (2^n)-1 (esempio: per n = 4, il massimo valore rappresentabile è (2^4)-1, ossia 15, la cui rappresentazione binaria è 1111). Nell'esempio dato, si verificherebbe overflow se a tale numero (1111) si sommasse 1. Il valore ottenuto diverrebbe "1 0000" (16, secondo il sistema decimale), impossibile da rappresentare su 4 bit. Siccome il numero di bit a disposizione è pre-impostato (nel nostro caso è 4, minore di 5), il bit più significativo andrebbe perso. Il valore memorizzato, pertanto, diverrebbe "0000", il quale codifica per il valore 0 (dunque non 16).

L'overflow viene solitamente ottenuto mediante somme di due numeri positivi estremamente grandi, in seguito alle quali la macchina restituisce un risultato negativo (matematicamente assurdo). Ugualmente, in caso di somme tra due numeri negativi estremamente piccoli, ci si può aspettare come risultato un numero positivo (in questo caso si tratterebbe di underflow). Il bit in più che viene "buttato" dalla macchina spesso rappresenta il segno del numero (1 nel caso sia negativo) quindi nel trabocco il numero perde il segno diventando positivo quando magari ci si aspettava un negativo (o viceversa).

### Complemento a 2

Il complemento a 2 è un metodo informatico di rappresentazione numerica spesso utilizzato per facilitare operazioni di somma e differenza tra numeri relativi. Il numero di bit destinati alla rappresentazione è pre-impostato dal programmatore nella cosiddetta fase di dichiarazione delle variabili, nonché dal linguaggio di programmazione stesso e dalla macchina su cui il codice viene eseguito. Per somme algebriche di numeri binari rappresentati in complemento a 2 si verifica overflow quando:

* la somma tra due numeri entrambi positivi restituisce un numero negativo;
* la somma tra due numeri entrambi negativi restituisce un numero positivo;
