
Ogni dato, indipendentemente dal suo tipo, viene memorizzato in un computer con una stringa binaria. Le differenze poi sono stabilite in fase di lettura, ovvero il modo in cui una sequenza viene letta determina il valore (ed il tipo) del dato stesso. In particolare, è possibile memorizzare due tipologie diverse di dati numerici: Integer e Float.
I dati Integer rappresentano i numeri interi e, a seconda del linguaggio di programmazione, è possibile definire tipi di diverse dimensioni. I tipi interi possono ammettere segno negativo oppure essere unsigned. 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. Col complemento a due, il primo bit del numero ha peso negativo o positivo; da questo deriva che tutti i numeri che cominciano con un “1” sono numeri binari negativi, mentre tutti i numeri che cominciano con uno “0” sono numeri binari positivi.
La quantità di numeri che un Integer può rappresentare, dipende dal numero di bits da cui è composto. Un Integer con n bits può rappresentare 2n numeri. I numeri interi vengono codificati direttamente in binario.
Per i numeri Float, o a virgola mobile, la codifica è più complessa. Infatti, un numero in virgola mobile è costituito nella sua forma più semplice da due parti:
- un campo significando o mantissa M;
- un campo esponente e.
Un generico numero reale a può così essere rappresentato come:
Un numero è caratterizzato dal valore b, che costituisce la base della notazione in cui è scritto il numero, e la quantità p di cifre presenti nella mantissa, detta precisione.
Bisogna tuttavia sottolineare come il tipo decimal, pur essendo un Float, sia leggermente diverso dagli altri. Infatti, contrariamente a tutti gli altri tipi numerici, è codificato in base 10 (invece che nella canonica base 2). La motivazione è che questo permette di scrivere i numeri in base 10 in maniera esatta, ovvero non ricorrendo ad approssimazioni. Questo è molto utile sopratutto in ambito finanziario, in quanto le transazioni posso essere registrate con l’importo esatto, evitando così problemi legati all’approssimazione.
La tipologia di Integer, come anche di Float, definibili, dipende dal linguaggio utilizzato. Di seguito sono riportati le tipologie di numeri Integer e Float in C# e in VB.net, con il range di valori che possono assumere. Per i tipi Float viene anche riportata la precisione massima.
VB.net
Integer types
| Tipo di dato | Spazio di memoria | Valore minimo | Valore massimo |
|---|---|---|---|
SByte | 1 byte | -128 | 127 |
Short | 2 bytes | -32.768 | 32.767 |
Integer | 4 bytes | -2.147.483.648 | 2.147.483.647 |
Long | 8 bytes | -9.223.372.036.854.775.808 | -9.223.372.036.854.775.807 |
Byte | 1 byte | 0 | 255 |
UShort | 2 bytes | 0 | 65.535 |
UInteger | 4 bytes | 0 | 4.294.967.295 |
ULong | 8 bytes | 0 | 18.446.744.073.709.551.615 |
Floating point types
| Tipo di dato | Spazio di memoria | Precisione | Valore minimo | Valore massimo |
|---|---|---|---|---|
Single | 4 bytes | 1.401298 E-45 | -3.4028235 +38 | 3.4028235 E+38 |
Double | 8 bytes | 4.94065645841246544 E-324 | -1.79769313486231570 E+308 | 1.79769313486231570 +308 |
Decimal | 16 bytes | 1.0 E-28 | -79.228.162.514.264.337.593.543.950.335 | 79.228.162.514.264.337.593.543.950.335 |
C#
Integer types
| Tipo di dato | Spazio di memoria | Valore minimo | Valore massimo |
|---|---|---|---|
sbyte | 1 byte | -128 | 127 |
short | 2 bytes | -32.768 | 32.767 |
int | 4 bytes | -2.147.483.648 | 2.147.483.647 |
long | 8 bytes | -9.223.372.036.854.775.808 | -9.223.372.036.854.775.807 |
byte | 1 byte | 0 | 255 |
ushort | 2 bytes | 0 | 65.535 |
uint | 4 bytes | 0 | 4.294.967.295 |
ulong | 8 bytes | 0 | 18.446.744.073.709.551.615 |
Floating point types
| Tipo di dato | Spazio di memoria | Precisione | Valore minimo | Valore massimo |
|---|---|---|---|---|
float | 4 bytes | 1.401298 E-45 | -3.4028235 +38 | 3.4028235 E+38 |
double | 8 bytes | 4.94065645841246544 E-324 | -1.79769313486231570 E+308 | 1.79769313486231570 +308 |
decimal | 16 bytes | 1.0 E-28 | -79.228.162.514.264.337.593.543.950.335 | 79.228.162.514.264.337.593.543.950.335 |
Una risposta a "Rappresentazione nel computer dei tipi interi e floating point"