RAPPRESENTAZIONE DEI DATI IN MEMORIA Abbiamo imparato che tutte le informazioni per poter essere comprese e conservate dall’elaboratore devono essere in formato binario. Di seguito vedremo come sono organizzati i dati numerici e come avvengono conseguentemente le normali operazioni aritmetiche. Cominciamo con la rappresentazione dei numeri interi. I numeri interi con segno positivo, quando hanno il segno stesso sottinteso, si chiamano numeri naturali. In tal ultimo caso, se abbiamo a disposizione 8 bit per rappresentare un numero, in pratica possiamo lavorare con tutti i numeri naturali compresi tra il valore decimale zero (in binario 00000000) e il valore decimale 255 (in binario 11111111). 255 però è un numero troppo piccolo per qualsiasi uso pratico. Un primo modo di arginare questo problema è quello di accostare tra loro più parole di 8 bit. In questo modo, se abbiamo a disposizione per esempio 16 bit, possiamo arrivare a rappresentare tutti gli interi positivi da zero a 65535. In generale, se abbiamo a disposizione parole lunghe n bit, possiamo rappresentare tutti i numeri compresi fra zero e ((2^n) – 1). La rappresentazione dei numeri in forma di binario puro di cui sopra presenta comunque un problema, un fenomeno che si chiama overflow. Con il termine overflow ci si riferisce al fenomeno di traboccamento di un numero dallo spazio di memoria che ha a disposizione. In pratica l’overflow è un errore che si presenta quando si tenta di scrivere un numero più grande del massimo consentito dalla configurazione di n bit. Per quanto si estenda il numero di bit o si cerchi di affiancare più byte, il fenomeno dell’overflow è ineliminabile poiché la dimensione della memoria è comunque finita. Se abbiamo bisogno di rappresentare anche il segno positivo o negativo di un numero e abbiamo a disposizione 8 bit, il bit più significativo, ovvero quello a sinistra, verrà dedicato al segno (tecnica del modulo e segno). In quest’ultimo caso, tutti i numeri che possiamo rappresentare sono tutti i numeri interi compresi nell’intervallo da –127 a +127. Rispetto a tale ultima eventualità, un numero negativo più piccolo di –127 non è dunque rappresentabile. Tale problema prende il nome di underflow. Il fenomeno dell’underflow è inverso al problema dell’overflow. L’underflow infatti si verifica quando si cerca di memorizzare un numero più piccolo del valore minimo consentito dalla configurazione. Al fine di rendere semplice al personal computer le operazioni aritmetiche, per rappresentare i numeri si utilizza la tecnica del complemento a 2. La tecnica del complemento a 2 si basa sulla tecnica del complemento a 1. Vediamo allora prima la tecnica del complemento a 1. Con la tecnica del complemento a 1: - si scrive il numero in formato binario aggiungendo a sinistra tanti zeri quanti ne servono per arrivare a 8 bit - si sostituisce ogni zero con un 1 e viceversa. La determinazione del complemento a 2, a questo punto, si ottiene semplicemente aggiungendo il successivo passo: - sommare 1 al numero ottenuto con il complemento a 1. La rappresentazione nella memoria dei numeri avviene in pratica nel seguente modo: - se il numero da rappresentare è positivo, si segue la tecnica del modulo e segno visto prima - se il numero da rappresentare è negativo si dovrà applicare la tecnica del complemento a 2 del numero stesso senza però il segno meno. Per rappresentare ad esempio in memoria –30 in base 10 bisogna calcolare il complemento a 2 di 30. Vediamo un esempio. Rappresentare in memoria il numero –73. 73 in base 2 è il numero 01001001. A questo punto bisogna calcolare il complemento a 1 che è la stringa 10110110. Quindi bisogna sommare 1 ottenendo la stringa 10110111. La rappresentazione corretta dunque in complemento a 2 di –73 in base 10 è la stringa 10110111. Il vantaggio più grande delle precedenti cose si ha nelle operazioni aritmetiche. Mentre però l’addizione tra numeri positivi non presenta rilevanti differenze perché sono rappresentati in modulo e segno, la novità riguarda l’addizione tra numeri negativi, ovvero nella sottrazione, che appunto si trasforma nell’addizione del primo operando con il complemento a 2 del secondo operando. In tal ultimo caso, se il risultato presenterà un numero di bit superiore a quello degli operandi, a causa di un eventuale riporto, si troncherà la cifra più significativa del risultato, con il numero troncato però che è il risultato della sottrazione. Si vedano a tal fine i tre successivi esempi. 1) Calcolare 15+39 00001111+ 00100111= 00110110 2) Calcolare 45-30 00101101+ 11100010= 00001111 Vediamo adesso la rappresentazione dei numeri reali. Le possibili soluzioni sono 2. Il primo modo di rappresentare i numeri reali è detto in Virgola Fissa. Questa tecnica prevede che, all’interno di ogni byte, il punto decimale occupa sempre la stessa posizione. In pratica avremo una divisione netta del byte in una zona destinata alla parte intera e in una zona destinata alla parte decimale, entrambe con la lunghezza prefissa in modo statico. Se per esempio immaginiamo di suddividere un byte in una zona di 5 bit per la parte intera e in una zona di 3 bit per la parte decimale, se la parola contiene la sequenza di bit 01010101 allora dovremo interpretarla come il numero binario 01010,101 Un modo alternativo per rappresentare in memoria i numeri irreali è la tecnica di rappresentazione in Virgola Mobile. Secondo questa tecnica i numeri vengono espressi in forma esponenziale. Nella figura successiva è riportata una modalità di organizzazione in virgola mobile su 16 bit. esponente (4 bit) Segno esponente (1 bit) Mantissa (10 bit) Segno mantissa (1 bit)