Numero intero (informatica)
# Numero intero (informatica)

In informatica si definisce intero (o nella sua forma inglese integer, spesso abbreviato in int) ogni tipo di dato che possa rappresentare un sottoinsieme dell'insieme matematico dei numeri interi.

## Valore e rappresentazione

Il valore di un dato di tipo intero consiste nel numero intero a cui corrisponde. La sua rappresentazione consiste nel modo in cui esso è immagazzinato nella memoria del computer. I dati interi possono essere con segno o senza segno, cosa che ne discrimina la capacità di rappresentare numeri negativi.

Il metodo più comune di rappresentare questo tipo di dati consiste in una stringa di bit, usando il sistema binario. L'ordine dei byte all'interno della stringa può variare. La lunghezza o precisione è il numero di bit impiegato nella rappresentazione. Un tipo di dati intero con precisione n può rappresentare fino a $2^n$ valori; per esempio, un tipo senza segno può rappresentare i numeri da 0 a $2^n-1.$

Esistono tre modi differenti per rappresentare i numeri negativi in un sistema binario. Il più comune è il "complemento a due", che permette di rappresentare i numeri da $-2^{(n-1)}$ a $2^{(n-1)}-1.$ Questo metodo è conveniente perché crea una corrispondenza biunivoca tra valori e rappresentazioni, e perché nelle operazioni di addizione e sottrazione non è necessario distinguere tra valori con segno e senza. Gli altri metodi usati sono quelli del "segno e valore assoluto" e del "complemento a uno" (si veda la rappresentazione dei numeri relativi).

## Tipi di dato interi comuni

| Bit | Nome | Portata | Impieghi |
| - | - | - | - |
| 8 | Byte, ottetto | Con segno: da −128 a +127 Senza segno: da 0 a +255 | Caratteri ASCII, carattere C (minimo), byte Java |
| 16 | Mezza word, word | Con segno: da −32.768 a +32.767 Senza segno: da 0 a +65.535 | Caratteri UCS-2, int C short (minimo), interi C (minimo), carattere Java, short Java |
| 32 | word, word doppia (double), lunga | Con segno: da −2.147.483.648 a +2.147.483.647 Senza segno: da 0 a +4.294.967.295 | Caratteri UCS-4, True color con alpha, C int (normale), C long int (minimo), Java int |
| 64 | word doppia, lunga, quadrupla | Con segno: da −9.223.372.036.854.775.808 a +9.223.372.036.854.775.807 Senza segno: da 0 a +18.446.744.073.709.551.615 | C long int (su linux sistemi a 64 bit), C99 long long int (minimo), Java long |
| 128 | | Con segno: da −170.141.183.460.469.231.731.687.303.715.884.105.728 a +170.141.183.460.469.231.731.687.303.715.884.105.727 Senza segno: da 0 a +340.282.366.920.938.463.463.374.607.431.768.211.455 | C int __attribute__ ((mode(TI))) (su sistemi a 64 bit con gcc) |
| n | Intero a n bit | Con segno: da -2^{n-1} a 2^{n-1} -1 Senza segno: da 0 a 2^{n}-1 | |

In genere ogni CPU supporta un ridotto numero di tipi di dati, sia con sia senza segno. La tabella sopra mostra i tipi supportati dalla maggior parte dei processori in commercio in via hardware. Linguaggi di programmazione ad alto livello permettono ad esempio numeri composti da un numero di bit doppio rispetto al massimo supportato dall'hardware.

Alcuni linguaggi, come LISP, REXX e Haskell, supportano numeri a "precisione arbitraria" (conosciuti anche come interi a "precisione infinita" o bignum); altri linguaggi possiedono librerie che permettono di rappresentare numeri attraverso insiemi di variabili più piccole, come i BigInteger di Java. Questi metodi usano per la rappresentazione del numero tanta memoria quanta ne è necessaria, ma la memoria dei computer è finita, e quindi anche questi metodi permettono di rappresentare un insieme comunque finito di numeri interi. Si può comunque arrivare, con 8 KB di memoria, a rappresentare numeri di 2466 cifre.

Un tipo di dato booleano o flag può rappresentare solo due valori: 0 e 1, generalmente associati rispettivamente a falso e vero. Questo tipo può essere immagazzinato su un singolo bit, ma generalmente viene impiegato un intero byte per semplicità di indirizzamento e velocità di accesso.

Una stringa di quattro bit è chiamata nibble: uno di questi corrisponde ad una cifra in codifica esadecimale e contiene una cifra o un codice di segno in decimale binario.

Un long integer (intero lungo) può contenere un numero intero positivo o negativo compreso in un intervallo uguale o più ampio di quello di una normale variabile intero sulla stessa piattaforma. Nella pratica è comune che un long integer occupi il doppio o lo stesso spazio richiesto da un normale integer, seppure questo non sia necessario. Una variabile definita col tipo long integer in un linguaggio di programmazione può avere una dimensione diversa da una variabile definita con un tipo simile in un altro linguaggio. Inoltre in alcuni linguaggi come Java la dimensione è fissa per tutte le piattaforme, mentre in altri dipende dal tipo di macchina.

Quella che segue è una tabella dei più comuni valori del long integer nei diversi linguaggi di programmazione:

| linguaggio di programmazione | piattaforma | nome del tipo | spazio in byte | valore minimo | valore massimo |
| - | - | - | - | - | - |
| VB | Windows | Long | 4 | −2.147.483.648 o $−2^{31}$ | 2.147.483.647 o $2^{31}−1$ |
| VBA | Windows, Mac OS | Long | 4 | −2.147.483.648 o $−2^{31}$ | 2.147.483.647 o $2^{31}−1$ |
| VB.NET | tutte le piattaforme | long | 8 | −9.223.372.036.854.775.808 o $−2^{63}$ | 9.223.372.036.854.775.807 o $2^{63}−1$ |
| Java | tutte le piattaforme | long | 8 | −9.223.372.036.854.775.808 o $−2^{63}$ | 9.223.372.036.854.775.807 o $2^{63}−1$ |
| C# | tutte le piattaforme | long | 8 | −9.223.372.036.854.775.808 o $−2^{63}$ | 9.223.372.036.854.775.807 o $2^{63}−1$ |
| PHP | tutte le piattaforme | $ | 8 | −9.223.372.036.854.775.808 o $−2^{63}$ | 9.223.372.036.854.775.807 o $2^{63}−1$ |

L'API di Windows definisce il tipo LONG come un intero di 4 byte. Questo vale indifferentemente sui sistemi a 16, 32 e 64 bit per ragioni di retrocompatibilità.

## Puntatori

Un puntatore consiste spesso, ma non sempre, in un numero intero di data lunghezza. Questa è spesso la maggiore supportata dal sistema in via hardware. Il valore del numero è l'indirizzo di ciò a cui rimanda il puntatore.

## Byte e ottetto

Il termine byte era inizialmente riferito alla più piccola quantità di memoria indirizzabile: in passato furono usati byte a 5,6,7,8 e 9 bit. Furono creati inoltre computer che potevano indirizzare i singoli bit o solo parole di 16 o 32 bit, al riguardo dei quali il termine byte non era utilizzato affatto.

Il termine "ottetto" si riferisce esclusivamente a quantità di memoria di 8 bit. Si utilizza soprattutto per le reti informatiche, in cui elaboratori che utilizzano più formati possono dover comunicare.

Attualmente il termine "ottetto" è caduto in disuso insieme agli altri formati, e viene generalmente identificato col termine "byte".

I byte sono utilizzati per misurare ogni quantità di dati dell'informatica, che sia una stringa di testo di 50 byte, un file da 100 KB, un modulo di RAM da 128 MB o un disco rigido da 30 GB. I prefissi utilizzati per le unità di misura sono spesso le stesse del Sistema Internazionale, ma le grandezze sono diverse; ciò è importante soprattutto per i dischi rigidi, i cui produttori ne pubblicizzano la capacità con le unità di misura del SI, facendoli sembrare più capaci di quanto siano in realtà (vedere al riguardo l'articolo sui prefissi binari).

## Word

Il termine word (in inglese parola) è utilizzato in informatica per piccoli gruppi di bit che possono essere processati contemporaneamente dalle CPU di una particolare architettura. La grandezza della parola è specifica di quest'ultima. Sono state usate parole di varie dimensioni, come 6, 8, 12, 16, 18, 24, 32, 36, 39, 48, 60, e 64 bit. Data la dipendenza di questa dall'architettura, la dimensione della parola è determinata dalla prima CPU di una famiglia, a prescindere dalla compatibilità delle versioni successive. Il significato dei termini derivati mezza parola, parola doppia, parola lunga, parola quadrupla dipende inoltre sempre dalla CPU e dal sistema operativo. Al 2004 le parole di 32 bit sono le più usate in elaboratori di uso comune, mentre parole a 64 bit sono usate in grandi sistemi. Molti processori embedded usano ancora parole a 8 e 16 bit, mentre le parole a 36 bit o comunque non multipli di 8 bit, usate agli albori dell'informatica, sono scomparse insieme ai byte non a 8 bit.

