Overflow aritmetico

Da Wikipedia, l'enciclopedia libera.

Un overflow aritmetico è un problema relativo alle operazioni sui numeri all'interno di un computer. Il problema è dovuto al fatto che il computer non è in grado di memorizzare qualsiasi tipo di numero, o meglio, non è in grado di memorizzare un qualsiasi numero di cifre, ma solo tante quante sono i bit a disposizione nella memoria per quel tipo di dato. Ogni bit può assumere due soli valori, 1 e 0; se abbiamo a disposizione n bit, per esempio 4, possiamo memorizzare un numero massimo pari a 1111 (15 nel sistema decimale). Se cercassimo di modificare questo numero aggiungendo 1 il numero diventerebbe 10000(16 in decimale), ma la macchina può memorizzare solo 4 bit, quindi memorizzerebbe il numero 0000 il che non corrisponde a quanto avremmo voluto.

Complemento a 2[modifica | modifica sorgente]

In un computer ogni tipo di informazione è memorizzata come una sequenza di 0 e 1 (sistema binario), in genere in complemento a 2. Non tutti i dati vengono memorizzati con lo stesso numero di bit, ma dipende da come il programmatore dichiara quel dato al momento della scrittura del codice sorgente, nonché dal linguaggio di programmazione stesso e dalla macchina su cui questo codice viene eseguito. Per numeri binari rappresentati in complemento a 2 si verifica overflow per l'addizione se e solo se:

  • la somma tra due numeri positivi restituisce un numero negativo;
  • la somma tra due numeri negativi restituisce un numero positivo.

La sottrazione tra due numeri binari si effettua trasformando il secondo numero nel suo opposto (per esempio 5 - 4 è la stessa cosa che fare 5 + (-4)) e facendo la somma, per cui ci si riconduce al caso dell'addizione. Ciò premesso è facile notare che si verifica overflow durante un'operazione di sottrazione se e solo se:

  • la sottrazione tra un numero positivo e uno negativo (ovvero la somma di due numeri positivi) restituisce un numero negativo;
  • la sottrazione tra un numero negativo e uno positivo (ovvero la somma di due numeri negativi) restituisce un numero positivo;

In tutti gli altri casi non è mai possibile che si verifichi un overflow.

Voci correlate[modifica | modifica sorgente]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica