[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
La rappresentazione dei valori numerici è importante per stabilire la procedura necessaria a eseguire dei calcoli. In questo capitolo si riepilogano alcuni concetti che possono essere utili per comprendere il significato di alcune forme di rappresentazione dei valori numerici nei linguaggi di programmazione.
Un valore numerico potrebbe essere espresso come una stringa di caratteri, corrispondenti alle cifre numeriche che lo rappresentano secondo la notazione in base dieci. Naturalmente, una rappresentazione del genere implica uno spreco di spazio nel sistema di memorizzazione e richiede una trasformazione prima di poter procedere all'esecuzione di calcoli numerici.
Esistono diverse forme di rappresentazioni numeriche, intese come sequenze di cifre in base dieci, che utilizzano quattro bit per ogni cifra. Il sistema più comune è noto con il nome BCD: Binary coded decimal.
I sistemi di rappresentazione numerica che utilizzano quattro bit per ogni cifra di un valore in base dieci, si utilizzano per esempio nel linguaggio COBOL, per le variabili scalari di tipo computational.
|
La codifica BCD e altre sono codici pesati, in quanto a ogni bit viene attribuito un peso, da sommare per determinare il valore. I pesi per la codifica BCD sono 8, 4, 2 e 1; pertanto, il codice BCD 10012 corrisponde a 1*8+0*4+0*2+1*1 = 9. Nella tabella riepilogativa, i codici pesati sono: BCD, 2421, 5211, 631-1 e 732-1. I nomi usati per questi codici sono costituiti dalla sequenza dei pesi stessi.
Alcuni codici pesati prevedono la rappresentazione di alcune cifre in più di un modo alternativo. Per esempio, nel codice 2421, il numero due si può ottenere sia come 10002, sia come 00102.
I codici pesati come BCD (ovvero 8421), 2421 e 5211, prevedono pesi positivi; i codici come 631-1 e 732-1, prevedono anche pesi negativi. Per esempio, con il codice 732-1, si ottiene il valore uno con il codice 00112, perché il secondo bit (a destra) vale come il numero due, mentre il primo bit (a destra) sottrae una unità.
Dei codici che appaiono nella tabella, il codice a eccesso tre, non è un codice pesato, in quanto corrisponde al codice BCD, a cui si aggiunge il valore tre.
È necessario sottolineare che il codice BCD, a seconda del contesto, può essere riferito anche a un codice a otto bit, dove i primi quattro, più significativi, sono posti a zero. |
Quando si rappresentano dei valori numerici in forma binaria, senza passare per una conversione di ogni singola cifre decimale, si usa tutta la sequenza di bit per il valore. La rappresentazione di un valore intero senza segno coincide normalmente con il valore binario contenuto nella variabile. Pertanto, una variabile della dimensione di 8 bit, può rappresentare valori da zero a 28-1:
000000002 (010)
000000012 (110)
000000022 (210)
...
111111102 (51010)
111111112 (51110)
Per rappresentare valori interi con segno (positivo o negativo), si deve riservare un bit per tale informazione. Generalmente si usa il bit più significativo, considerando lo zero come l'indice di un valore positivo e uno come indice di un valore negativo, in quanto complementato.
Per comprendere questa cosa è necessario fare degli esempi. Viene proposta la rappresentazione di valori all'interno di variabili a soli 8 bit complessivi, dove il bit più significativo serve a rappresentare il segno. Si supponga di volere rappresentare i valori +25 e -20: il primo valore corrisponde a 000110012, mentre il secondo corrisponde a -000101002, che però va convertito nel suo complemento alla base (complemento a due), ovvero 111011002.
|
In pratica, il bit usato per indicare il segno, manifesta il fatto che un numero sia rappresentato in modo normale (positivo), oppure complementato (negativo). In questo modo, le sottrazioni si ottengono attraverso le somme.
Disponendo di una variabile per rappresentare valori interi con segno, considerato che il bit più significativo serve a rappresentare il segno stesso, si dispone di un bit in meno per indicare il valore. Pertanto, se si dispone di n bit, si possono rappresentare valori fino a n-1 bit, ovvero valori fino a 2(n-1)-1. Per i numeri negativi, il calcolo è lo stesso, anche se si considera che si fa riferimento a valori complementati: si può rappresentare fino a -(2(n-1)-1).
|
Quando si sommano dei valori interi con segno, si possono presentare circostanze diverse per il modo di considerare il riporto che si ottiene. Vengono proposti alcuni esempi che servono a dimostrare le varie situazioni, dove si deve ricordare che i valori negativi sono rappresentati come complemento alla base del valore assoluto corrispondente.
|
|
|
|
|
|
|
Una forma diffusa per rappresentare dei valori molto grandi, consiste nell'indicare un numero con dei decimali moltiplicato per un valore costante elevato a un esponente intero. Per esempio, per rappresentare il numero 123 000 000 si potrebbe scrivere 123·106, oppure anche 0,123·109. Lo stesso ragionamento vale anche per valori molti piccoli; per esempio 0,000 000 123 che si potrebbe esprimere come 0,123·10-6.
Per usare una notazione uniforme, si può convenire di indicare il numero che appare prima della moltiplicazione per la costante elevata a una certa potenza come un valore che più si avvicina all'unità, essendo minore o al massimo uguale a uno. Pertanto, per gli esempi già mostrati, si tratterebbe sempre di 0,123·10n.
Per rappresentare valori a virgola mobile in modo binario, si usa un sistema simile, dove i bit a disposizione della variabile vengono suddivisi in tre parti: segno, esponente (di una base prestabilita) e mantissa, come nell'esempio che appare nella figura successiva.
|
Nella figura si ipotizza la gestione di una variabile a 16 bit per la rappresentazione di valori a virgola mobile. Come si vede dallo schema, il bit più significativo della variabile viene utilizzato per rappresentare il segno del numero; i sette bit successivi si usano per indicare l'esponente e gli otto bit finali per la mantissa, ovvero il valore da moltiplicare per una certa costante elevata all'esponente. Come si intende intuitivamente, il primo bit dell'esponente rappresenta il segno di questo.
Quello che manca da decidere è come deve essere interpretato il numero della mantissa e qual è il valore della costante da elevare all'esponente indicato. Sempre a titolo di esempio, si conviene che il valore indicato nella mantissa esprima precisamente «0,mantissa» e che la costante da elevare all'esponente indicato sia 16 (ovvero 24), che si traduce in pratica nello spostamento della virgola di quattro cifre binarie alla volta.
|
Naturalmente, le convenzioni possono essere cambiate: per esempio il segno lo si può incorporare nella mantissa; si può rappresentare l'esponente attraverso un numero al quale deve essere sottratta una costante fissa; si può stabilire un valore diverso della costante da elevare all'esponente; si possono distribuire diversamente gli spazi assegnati all'esponente e alla mantissa.
Mario Italiani, Giuseppe Serazzi, Elementi di informatica, ETAS libri, 1973, ISBN 8845303632
Sandro Petrizzelli, Appunti di elettronica digitale
Tony R. Kuphaldt, Lessons In Electric Circuits
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome rappresentazione_di_valori_numerici.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]