Rappresentazione nel computer dei tipi interi e floating point

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:

\operatorname {a}=\operatorname {M}\times \operatorname {b}^{E}

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 datoSpazio di memoriaValore minimoValore massimo
 SByte 1 byte-128127
 Short 2 bytes -32.768 32.767
 Integer 4 bytes -2.147.483.648 2.147.483.647
 Long8 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 datoSpazio di memoriaPrecisioneValore minimoValore massimo
 Single 4 bytes 1.401298 E-45-3.4028235 +383.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 datoSpazio di memoriaValore minimoValore massimo
 sbyte 1 byte-128127
 short 2 bytes -32.768 32.767
 int 4 bytes -2.147.483.648 2.147.483.647
 long8 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 datoSpazio di memoriaPrecisioneValore minimoValore massimo
 float 4 bytes 1.401298 E-45-3.4028235 +383.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"

Lascia un commento