CODIFICA NUMERICA · In questa codifica i numeri, interi, vengono tradotti in sequenze binarie. Con...
Transcript of CODIFICA NUMERICA · In questa codifica i numeri, interi, vengono tradotti in sequenze binarie. Con...
CODIFICA
NUMERICA
Ing. Daniele Corti
Copyright © Ing. Daniele Corti 2013
www.ingdanielecorti.it
Tutti i diritti sono riservati a norma di legge e a norma delle convenzioni internazionali.
Ver.1.0
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
2 Copyright © 2013 – Ing. Daniele Corti
PREREQUISITI
Linguaggio binario.
Codifica.
OBIETTIVI
Realizzare codifiche/decodifiche di numeri naturali, relativi e reali in notazione fissa.
ARGOMENTI
I sistemi di numerazione.
Il sistema decimale.
Il sistema binario.
Codifica binaria.
Codifica da decimale a binario di numeri naturali.
Decodifica da binario a decimale di numeri naturali.
Codifica/decodifica dei numeri relativi con la tecnica CPM2 (complemento a 2).
Codifica/decodifica di numeri decimali in notazione virgola fissa.
Sistemi esadecimali e ottali.
Esercizi.
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
3 Copyright © 2013 – Ing. Daniele Corti
CAP5 – CODIFICA NUMERICA
I SISTEMI DI NUMERAZIONE
Fin dalla preistoria l’uomo ha avuto la necessità di “fare calcoli”, utilizzando svariati tipi di
dispositivi: manuali (mani, bastoncini, sassi, abaco), meccanici ed elettronici.
Figura 1 - L'abaco
Per fare i calcoli l’uomo ha bisogno di regole, cioè un sistema di numerazione.
Un sistema di numerazione è una tecnica che consente la rappresentazione dei numeri
attraverso un insieme di simboli.
Un numero si compone di cifre, cioè di simboli ad ognuno dei quali viene associato univocamente un
valore diverso dagli altri. Per scrivere tutti i numeri in un determinato sistema di numerazione
dobbiamo conoscere quali sono le cifre base.
I sistemi di numerazione moderni sono sistemi di numerazione posizionali, ovvero una stessa cifra
ha un “peso” diverso in dipendenza dalla posizione che essa occupa all’interno del numero in
questione. Per esempio nel numero 44, la cifra 4 che si trova a sinistra vale 10 volte di più di quella
che le sta immediatamente a destra.
Da ciò nasce il concetto di base: la base indica il numero di cifre a disposizione del sistema di
numerazione e, di conseguenza, quante volte di più vale la stessa cifra man mano che questa occupa
una posizione sempre più a sinistra all’interno di un numero. Pertanto si può pensare che ad ogni
posizione all’interno di un numero sia associato un “peso” che non è altro che una potenza della base
del sistema di numerazione considerato.
In generale, possiamo parlare di sistema di numerazione in base B, se abbiamo a disposizione B
simboli (alfabeto) per poter rappresentare tutte le possibili sequenze.
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
4 Copyright © 2013 – Ing. Daniele Corti
IL SISTEMA DECIMALE
Il sistema di numerazione decimale è quello utilizzato comunemente dall’uomo per fare i calcoli.
Questo sistema ha 10 simboli (cifre decimali) di base: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Un numero decimale è una combinazione di cifre; a seconda della posizione la cifra assume un peso
differente secondo le potenze di 10 crescenti, a partire dalla posizione a destra (cifra meno
significativa).
Il sistema decimale è inoltre posizionale: il significato di ogni cifra dipende dalla sua posizione nella
sequenza che costituisce il numero da rappresentare (7465 è diverso da 6475).
1a posizione: la cifra viene moltiplicata per 1 (100).
2a posizione: la cifra viene moltiplicata per 10 (101).
3a posizione: la cifra viene moltiplicata per 100 (102).
Etc.
Esempio
Utilizzando la notazione posizionale, il numero 357,2510 può essere così espresso:
Peso 103 102 101 100 10-1 10-2
Cifra 8 3 5 7, 2 5
8357,2510 = 8*103 + 3*102 + 5*101 + 7*100 + 2*10-1 + 5*10-2 = 8000 + 300 + 50 + 7 + 0,2 + 0,05
Esempi
Rappresentiamo con l’abaco alcuni numeri in base 10:
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
5 Copyright © 2013 – Ing. Daniele Corti
Osserviamo che una decina corrisponde a 10 unità semplici, che un centinaio corrisponde a 10 decine
ciascuna delle quali corrisponde a 10 unità semplici. Pertanto un centinaio corrisponde a 100 unità
semplici.
IL SISTEMA BINARIO
La codifica binaria si basa su un sistema di numerazione binario (base 2) in cui i simboli che
compongono l’alfabeto sono solamente 2 (lo 0 e l’1). Un sistema così fatto ha indubbiamente
l’importante vantaggio di poter rappresentare (e manipolare) facilmente i dati binari all’interno del
calcolatore. L’aritmetica binaria segue le stesse regole del sistema decimale. Per distinguere la base
utilizzata, viene utilizzato un pedice:
I numeri in base 10 saranno scritti come 46310 e 8.3210.
I numeri in base 2 saranno scritti invece come 10102 e 10112.
Attenzione che questi ultimi due numeri binari non si pronunciano, rispettivamente, mille-dieci e
mille-undici, ma, uno-zero-uno-zero e uno-zero-uno-uno, cioè scandendo cifra per cifra.
Il sistema binario è utilizzato dai calcolatori e altri dispositivi elettronici digitali per fare i calcoli.
CODIFICA BINARIA
Per dialogare con un computer è necessaria una tecnica che possa convertire le informazioni
rappresentate nel nostro sistema naturale (linguaggio di parole e numeri) in codici comprensibili al
computer.
La codifica binaria è la rappresentazione dell’informazione in un calcolatore, effettuata utilizzando
un alfabeto limitato a soli due simboli (0 e 1), a causa della capacità dei dispositivi elettronici (i
transistori) di un elaboratore di salvare solo cifre binarie (corrispondenti ai due possibili stati logici
di un circuito elettrico: aperto o chiuso).
L’informazione rappresentabile può essere di qualsiasi tipo:
1+1= 10
?????
impossibil
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
6 Copyright © 2013 – Ing. Daniele Corti
numeri (interi con e senza segno, reali), caratteri alfanumerici, immagini, suoni, video, etc.
Nel nostro studio sulla codifica inizieremo a vedere le tecniche utilizzate per codificare i numeri interi
senza segno e con segno.
NB La memorizzazione e la rappresentazione dei numeri, pur utilizzando la logica binaria, non
funziona convertendo le singole cifre in Byte come per i caratteri ma trasforma direttamente i
numeri in binario.
CODIFICA BINARIA DEI NUMERI INTERI
In questa codifica i numeri, interi, vengono tradotti in sequenze binarie.
Con 8 bit (n bit) possiamo memorizzare (codificare) 256 simboli differenti.
Se i simboli sono numeri interi senza segno (numeri naturali), allora, i numeri saranno
compresi fra
0 e 255 (2n-1).
Se i simboli sono numeri interi con segno (numeri relativi) i numeri saranno compresi fra
-128 (-2n-1) e +127 (2n-1-1).
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
7 Copyright © 2013 – Ing. Daniele Corti
RAPPRESENTAZIONE DEGLI INTERI SENZA SEGNO
La rappresentazione più diretta dei 2n interi tra 0 e 2n-1 è quella che utilizza la rappresentazione
binaria posizionale degli interi.
Ricordiamo che la notazione decimale posizionale, cui siamo abituati, è quella in cui il significato di
uno dei dieci simboli di base (le cifre 0,1,2,3,4,5,6,7,8,9) dipende dalla posizione di questo
all’interno della sequenza di cifre.
P. es. il numero 361 va interpretato come: 3 centinaia + 6 decine + 1 unità. Ovvero:
3*102 + 6*101 + 1*100
Se invece di usare le dieci cifre usuali ne usiamo solo due (0,1 rappresentabili in un circuito mediante
tensione alta e tensione bassa) avremo la possibilità di una rappresentazione posizionale in base due
in cui un numero è costituito unicamente da una sequenza di 0 e 1.
P.es.: 11010 va interpretato come
1*24 + 1*23 + 0*22 + 1*21 + 0*20
Ovvero, indicando con un apice 10 oppure 2 la rappresentazione in base 10 o 2 rispettivamente,
110102 = 2610
Questa possibilità è quella "naturale" per un computer perché le operazioni aritmetiche sono svolte
su dati rappresentati in registri (speciali circuiti) del processore sotto forma di un numero fisso di bit.
CONVERSIONE DA DECIMALE A BINARIO – CODIFICA
DI NUMERI NATURALI: DEC BIN
Vediamo come si converte un numero intero positivo in binario.
Metodo 1 (metodo pratico)
Esempio: convertire il numero 40 decimale in binario, sulla base di 8 bit.
4010 40 < 26 n = 6
Imposto la tabella a 8 bit, segnando i pesi binari per ogni cifra.
128 64 32 16 8 4 2 1 PESI
0 0 1 0 1 0 0 0 BIT
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
8 Copyright © 2013 – Ing. Daniele Corti
Individuo quali pesi sommare fra loro al fine di ottenere il numero decimale 40; in corrispondenza di
questi pesi segno cifra 1, e altrove segno 0.
Ottengo:
001010002
E come si nota le prime due cifre più significative sono 0 e quindi è rispettato il calcolo che per
rappresentare il 40 bastano 6 bit, ma le memorie del calcolatore scelto è da 8 bit, e i bit li devo
considerare tutti e 8.
Metodo 2 (formale)
Per convertire un numero naturale N in binario occorre divide ripetutamente per la base 2 del sistema
binario e scrivere ordinatamente i valori dei resti ottenuti, a partire dalla posizione meno significativa.
Esempio: 4010
40 2
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
9 Copyright © 2013 – Ing. Daniele Corti
1 1 1 1 1 1 1 1
20 0
10 0
5 0
2 1
1 0
0 1
Ottengo:
1010002 e a parte le due cifre a 0 più significative, coincide con il precedente risultato (a 8 bit).
Quindi, a questo risultato DEVONO essere aggiunti i 2 zeri più significativi.
CONVERSIONE DA BINARIO A DECIMALE DI NUMERI
NATURALI (DECODIFICA): BIN DEC
Vediamo come si converte un numero binario in intero positivo.
Metodo 1 (metodo pratico)
identico al caso DECBIN
Esempio (4 bit): 11102
8=23 4=22 2=21 1=20
1 1 1 0
Esempi importanti (n=8):
2n
-1 = 255
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
10 Copyright © 2013 – Ing. Daniele Corti
0 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0
2n-1
-1 = 127
2n-1
= 128
Metodo 2 (formale)
Notazione posizionale.
Esempio (4 bit): 11102
1*23 + 1*22 + 1*21 + 0*20 = 8 + 4 + 2 + 0 = 1410
Esempio (4 bit)
Facciamo l’esempio di un intero (senza segno) rappresentato in registri a 8 bit. Potrebbe essere:
1 1 1 1 1 1 1 0
pari a 254.
Se adesso sommiamo 3 (112) a questo numero dovremmo ottenere:
1 0 0 0 0 0 0 0 1
Cioè 257.
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
11 Copyright © 2013 – Ing. Daniele Corti
Però la cella grigia non esiste nel registro del nostro processore. Quindi il bit corrispondente "si perde"
lasciando come risultato l'intero contenuto nelle sole celle bianche: 1 che corrisponde a 257 mod 28
(mod è l’operatore matematico che calcola il resto di una divisione, per es. 20 mod 2 = 0).
RAPPRESENTAZIONE DEGLI INTERI CON SEGNO
CODIFICA IN MODULO E SEGNO
Se abbiamo a disposizione n bit e vogliamo rappresentare interi negativi e positivi (in numero uguale),
la soluzione più semplice è quella di usare:
un bit dedicato al segno (per esempio 1 per valori maggiori o uguali a zero e, 0 per valori
minori di zero);
n-1 bit dedicati al modulo, codificati con la usale rappresentazione in base 2 (codifica pesata
dei numeri naturali).
In questo caso, allora, potremo rappresentare 2n-1 interi positivi (da +0 a 2n-1 - 1) e 2n-1 interi negativi
(da -0 a -2n-1 + 1). Da notare che in tal modo esisterebbero due diverse rappresentazioni dello zero e
il range dei positivi sarebbe lo stesso dei negativi. In totale 2n – 1 valori diversi (lo zero contato due
volte).
Questo metodo di rappresentazione non è il più agevole in quanto, oltre ad avere un piccolo spreco
di una configurazione, è difficilmente implementabile circuitalmente.
Per tali motivi, per implementare l’aritmetica in modulo 2n si utilizza, in genere, la tecnica detta
“complemento a due”.
In questa tecnica, gli interi con segno tra -2n-1 e 2n-1-1 hanno un’unica rappresentazione mediante
sequenze di n bit consecutive nell’aritmetica modulo 2n.
CODIFICA IN COMPLEMENTO A DUE
Per ottenere la rappresentazione complemento a due di un numero negativo, basta invertire tutti i bit
della rappresentazione binaria del numero positivo (gli zeri diventano uno e gli uno diventano zero)
e poi sommare uno al risultato. La spiegazione di questo algoritmo è semplice: con la notazione
complemento a due vogliamo poter fare la somma tra numeri positivi e negativi esattamente con lo
stesso algoritmo (circuiti) che manipola la somma tra numeri positivi. Questo implica che se
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
12 Copyright © 2013 – Ing. Daniele Corti
sommiamo ad un numero positivo il corrispondente negativo dobbiamo trovare zero. Facendo
riferimento alla discussione sopra accennata, si vede che se si somma ad un numero positivo la
sequenza di bit invertiti si ottiene un numero fatto solo dalle cifre 1. Aggiungendo un ulteriore 1 si
ottiene zero (con quel numero di bit). Da cui l’algoritmo del complemento a due.
La tabella seguente mostra quale è l’associazione tra sequenze di 8 bit ed valori interi con segno nella
rappresentazione in complemento a 2.
sequenza di bit interi con segno complemento a 2
0000 0000 0 0
0000 0001 1 1
... ... ...
0111 1110 126 126
0111 1111 127 127
1000 0000 -0 -128
1000 0001 -1 -127
... ... ...
1111 1111 -127 -1
TABELLA CONVERSIONE BIN POS/DEC
BIN (4 bit) DEC
0 0 0 0 0
0 0 0 1 1
0 0 1 0 2
0 0 1 1 3
0 1 0 0 4
0 1 0 1 5
0 1 1 0 6
0 1 1 1 7
1 0 0 0 8
1 0 0 1 9
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
13 Copyright © 2013 – Ing. Daniele Corti
1 0 1 0 10
1 0 1 1 11
1 1 0 0 12
1 1 0 1 13
1 1 1 0 14
1 1 1 1 15
NUMERI INTERI CON SEGNO
Utilizziamo la notazione modulo-segno. Abbiamo delle memorie RAM da 4 bit. Quanti numeri interi
con segno possiamo memorizzare:
2n = 24 = 16 numeri che vanno da (-2n-1 = -8) a (+2n-1-1 = +7)
BIN (4 bit) DEC
1 0 0 0 -8
1 0 0 1 -7
1 0 1 0 -6
1 0 1 1 -5
1 1 0 0 -4
1 1 0 1 -3
1 1 1 0 -2
1 1 1 1 -1
0 0 0 0 0
0 0 0 1 +1
0 0 1 0 +2
0 0 1 1 +3
0 1 0 0 +4
0 1 0 1 +5
0 1 1 0 +6
0 1 1 1 +7
SEGNO
-
+
CMP2
+
-
CMP2
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
14 Copyright © 2013 – Ing. Daniele Corti
Il bit più significativo indica il segno: 1 per negativi e 0 per positivi. I bit restanti sono utilizzati per
la rappresentazione del modulo (numero senza segno).
La tecnica del complemento a 2 è utilizzata per ricavare il numero positivo (o negativo) dal
corrispondente numero negativo (o positivo). Per esempio conoscendo il codice binario di +5 posso
ricavare il codice binario di -5.
Notate che la cifra binaria più significativa da informazione sul segno del numero; se è 0 il numero è
positivo, mentre se è 1 il numero è negativo.
Esempio: troviamo il complemento a 2 del numero +4.
8 4 2 1 PESI
0 1 0 0 NUMERO
1 1 RIPORTI
1 0 1 1 CMP1
1 +
1 1 0 0 CMP2
Il risultato, infatti, coincide con il numero -4.
TABELLA CONVERSIONE BIN CON SEGNO/DEC
BIN (5 bit) DEC
1 0 0 0 0 -16
1 0 0 0 1 -15
1 0 0 1 0 -14
1 0 0 1 1 -13
1 0 1 0 0 -12
1 0 1 0 1 -11
1 0 1 1 0 -10
1 0 1 1 1 -9
1 1 0 0 0 -8
1 1 0 0 1 -7
1 1 0 1 0 -6
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
15 Copyright © 2013 – Ing. Daniele Corti
1 1 0 1 1 -5
1 1 1 0 0 -4
1 1 1 0 1 -3
1 1 1 1 0 -2
1 1 1 1 1 -1
0 0 0 0 0 0
0 0 0 0 1 +1
0 0 0 1 0 +2
0 0 0 1 1 +3
0 0 1 0 0 +4
0 0 1 0 1 +5
0 0 1 1 0 +6
0 0 1 1 1 +7
0 1 0 0 0 +8
0 1 0 0 1 +9
0 1 0 1 0 +10
0 1 0 1 1 +11
0 1 1 0 0 +12
0 1 1 0 1 +13
0 1 1 1 0 +14
0 1 1 1 1 +15
CODIFICA DI NUMERI DECIMALI A VIRGOLA FISSA
Per la codifica BINARIA POSIZIONALE di numeri float (razionali o reali) in virgola fissa, si alloca
un numero prefissato di bit per la parte intera, e uno per la parte frazionaria. Esempio, 2 Byte, uno
per la parte intera e uno per quella frazionaria.
Esempio: 39.34510 = 00100111.010110002
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
16 Copyright © 2013 – Ing. Daniele Corti
DEC BIN
Dato un numero decimale, è necessario distinguere la parte intera da quella frazionaria:
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
17 Copyright © 2013 – Ing. Daniele Corti
N = I,F
Metodo 1 (formale)
Parte intera
Per convertire la parte intera I di un numero N si usa la stessa tecnica vista per i numeri interi, cioè,
dividere ripetutamente per 2 e scrivere ordinatamente i valori dei resti ottenuti, a partire dalla
posizione meno significativa.
Parte frazionale
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
18 Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
19 Copyright © 2013 – Ing. Daniele Corti
Metodo 2 (pratico)
Parte intera: vedi BINDEC
Parte frazionale: vedi BINDEC
BIN DEC
Convertire in decimale il numero binario N = 101011.10112
25=32 24=16 23=8 22=4 21=2 20=1 2-1= 1/2 2-2=1/4 2-3=1/8 2-4=1/16
1 0 1 0 1 1 1 0 1 1
N = 1*25 + 0*24 + 1*23 + 0*22 + 1*21 + 1*20 + 1*2-1 + 0*2-2 + 1*2-3 + 1*2-4 = 43.687510
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
20 Copyright © 2013 – Ing. Daniele Corti
Avendo C cifre a disposizione si possono rappresentare 2C numeri interi. Se, quindi,
abbiamo numeri interi senza segno (numeri naturali) possiamo rappresentare i numeri da 0 a
(2c
- 1), e se sono numeri interi con segno da -2c-1
a (2c-1
- 1).
Esempio:
se C = 4: interi naturali: da 0 a 24-1=15; interi con segno: da -23=-8 a 23-1=7.
Per rappresentare un certo numero N:
C >= log2N
Esempio:
N=4 C>=log24 C=2
N=8 C>=log28 C=3
NUMERAZIONE IN VIRGOLA MOBILE
La codifica in virgola fissa non è efficiente quando si deve lavorare con numeri con valore assoluto
molto grande o molto piccolo.
I numeri molto grandi richiedono un numero molto elevato di bit. Per esempio, la massa del sole in
grammi è pari a circa 2 x 10+33 ≅ 2+111; questo numero richiederebbe n ≥ 112 bit solo per codificare
la parte intera.
Numeri molti piccoli richiedono un numero molto elevato di bit per rappresentare la parte frazionaria.
Per esempio, la massa dell’elettrone in grammi è pari a circa 9 x 10-28 ≅ 2-90; questo numero
richiederebbe n ≥ 90 bit solo per codificare la parte frazionaria.
Per poter codificare entrambi i numeri dei precedenti due esempi sarebbero necessari almeno
1+112+90 = 203 bit: le celle di memoria degli attuali calcolatori ne contengono molti meno.
Per evitare gli inconvenienti della codifica in virgola fissa, nei calcolatori si usa una codifica basata
sula rappresentazione dei numeri reali in notazione esponenziale (usata comunemente in fisica,
chimica, etc.).
Ogni numero reale X può essere espresso in notazione esponenziale come:
M x BE
Dove:
M è un numero reale, detto matissa.
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
21 Copyright © 2013 – Ing. Daniele Corti
B è un numero naturale maggiore di 1, detto base.
E è un numero intero, detto esponenziale.
Nella pratica si usa comunemente B = 10.
Per esempio, le masse del sole e dell’elettrone negli esempi precedenti sono espressi in notazione
esponenziale con B = 10.
Ogni numero reale può essere espresso in notazione esponenziale in infiniti modi. Per esempio:
Le scelte più comode sono quelle che richiedono il minor numero di cifre pari a 0 prima o dopo la
virgola, in quanto consentono di rappresentare un dato valore con il minor numero possibile di cifre
per la mantissa. Nell’esempio precedente:
Il formato standard per la rappresentazione dei numeri in virgola mobile è chiamato IEEE 754. Con
parole di 32 bit, un numero in virgola mobile viene rappresentato come segue:
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
22 Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
23 Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
24 Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
25 Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
26 Copyright © 2013 – Ing. Daniele Corti
APPROFONDIMENTO - NUMERAZIONE IN VIRGOLA
MOBILE
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
27 Copyright © 2013 – Ing. Daniele Corti
Rappresentazione dei numeri con la virgola mobile - cifre significative.
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
28 Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
29 Copyright © 2013 – Ing. Daniele Corti
I numeri del sistema decimale con la virgola mobile (floating point) sono i numeri reali rappresentati
in base 10 mediante notazione "scientifica" ovvero moltiplicati o divisi per un opportuna potenza di
10 in modo da poter essere scritti in modo standardizzato come:
x.yxwt 10e oppure 0.xyxwt 10 e+1. Il coefficiente della potenza di 10 viene chiamato mantissa del
numero. Nel primo caso la mantissa è x.yxwt, mentre nel secondo è 0.xyxwt. La rappresentazione
mediante virgola mobile offre due principali vantaggi su altre possibili alternative: rende più semplice
automatizzare le operazioni aritmetiche e soprattutto permette di eliminare qualsiasi ambiguità tra
zeri significativi e posizionali.
Per illustrare quest'ultimo punto cerchiamo di capire come interpretare il valore delle cifre del numero
15000. Chiaramente, si tratta di un numero in cui ci sono 1 decina di migliaia e 5 migliaia. Però,
non è chiaro se i tre zeri che seguono vadano interpretati come "esattamente zero centinaia, zero
decine e zero unità" oppure come indicatori del valore di decine di migliaia e migliaia delle cifre
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
30 Copyright © 2013 – Ing. Daniele Corti
precedenti ma senza per questo implicare che il numero in questione corrisponda ad una conoscenza
esatta anche di centinaia, decine e unità. Nel primo caso, diremo che si tratta di zeri "significativi” e
che le cifre significative del numero sono in tutto 5. Nel secondo caso, gli zeri servono solo ad
attribuire il giusto valore posizionale a 1 e 5 ma il numero di cifre significative è 2. Con la
rappresentazione in virgola mobile si definiscono significative tutte le cifre (zeri inclusi) che siano a
destra della prima cifra diversa da zero.
In notazione binaria il concetto di numero a virgola mobile si estende in modo diretto. Inoltre, poiché
le cifre possono essere solo 0 oppure 1, se si opta per la forma "normalizzata” 1.xyzt 2e, in cui la
mantissa 1.xyzt inizia sempre per 1, possiamo omettere di indicare l'1 prima del punto risparmiando
un simbolo per rappresentare la mantissa.
Per standardizzare la rappresentazione di numeri binari floating point è necessario decidere quanti bit
utilizzare e come ripartirli tra mantissa ed esponente. Esistono moltissime possibili soluzioni e, in
principio, i linguaggi di programmazione dovrebbero essere "neutri" rispetto alle convenzioni di
rappresentazione. Di fatto, fin dagli ultimi '80 anni, si è imposto lo standard IEEE 754 che
prevede almeno due rappresentazioni:
1. una "corta" che utilizza 4 Byte, ovvero 32 bit ripartiti in: 1 bit per il segno della mantissa, 23
bit per la mantissa, senza il primo 1 (bit nascosto), ed 8 bit per l' esponente espresso come
intero binario nella forma con bias 127.
2. una "più lunga" o "a precisione doppia" che utilizza 8 Byte (64 bit) ripartiti in: 1 bit per il
segno della mantissa, 52 bit per la mantissa, senza il primo 1 (bit nascosto), ed 11 bit per l'
esponente espresso come intero binario nella forma con bias 1023.
Inoltre, due dei possibili valori dell’esponente sono in realtà riservati per esprimere dei valori speciali
risultanti da possibili operazioni aritmetiche mal definite come divisioni per zero o rapporti del tipo
0/0, nonché per rappresentare lo zero e un insieme di numeri "denormalizzati" per cui non vale la
convenzione del bit nascosto.
In dettaglio, per numeri a 32 bit la codifica è la seguente. Indichiamo con S, M ed E i campi di 1, 23
e 8 bit riservati alla codifica di segno (della mantissa), mantissa ed esponente.
Il campo "esponente", E, dei floating assume valori tra 0 e 255.
I valori di E da 1 a 254 permettono di esprimere numeri normalizzati in cui il primo bit (nascosto,
cioè non rappresentato esplicitamente) della mantissa è 1 (a sinistra del punto) e gli esponenti vanno
da -126 a +127. In altre parole, il valore del numero rappresentato da S,M ed E sarà (-1)S 1.M 2E-127.
Perciò il più piccolo numero normalizzato è 1.000...000 2 -126 che corrisponde approssimativamente
a 10 -38, mentre il più grande (1.111...111 2 +127) corrisponde a circa 10 +38. Se il campo E è zero e
M è zero, si ha lo zero, di cui esiste un valore positivo ed uno negativo a seconda del valore di S (0 o
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
31 Copyright © 2013 – Ing. Daniele Corti
1). Zero positivo e zero negativo devono essere trattati dai linguaggi di programmazione come
perfettamente equivalenti.
Se il campo E è zero mentre M è non nullo si tratta di numeri in cui la mantissa va interpretata come
0.M e la potenza di 2 come -126. Questi numeri "denormalizzati" permettono di rappresentare
valori compresi tra circa 10-45 e 10-37 al prezzo di un crescente perdita di precisione (diminuzione
delle cifre significative) man mano che ci si avvicina allo zero.
Se il campo E è 255 e M è 0 si considera il valore come segnale di un "overflow" ed il valore viene
indicato come + o - infinito a seconda del segno.
Infine, se il campo E è 255 ed M è non nullo, si attribuisce a tale sequenza il valore NaN (Not a
Number) che solitamente sta a segnalare il risultato di operazioni aritmetiche non definite come per
esempio il calcolo del rapporto 0/0.
In modo analogo per floating a 64. In questo caso il campo esponente è di 11 bit (e la rappresentazione
è mediante interi con bias 1023) mentre quello mantissa diviene di 52 bit (con in più il bit nascosto
per i numeri normalizzati).
Da notare che i valori speciali NaN (o nan) e +/- infinito dello standard IEEE non sono intesi come
elementi dell'insieme dei numeri reali ma come valori speciali da utilizzare nella programmazione
per avviare eventuali procedure di manipolazione delle condizioni di errore. Talvolta un compilatore
può generare automaticamente codice di gestione delle condizioni di errore nascondendo al
programmatore la possibilità di accedere ai valori speciali dello standard IEEE-754. Tuttavia,
normalmente, esistono opzioni del compilatore che permettono di evitare la gestione automatica.
Infine va aggiunto che lo standard prevede quattro diversi tipi di arrotondamento nell’ esecuzione
delle operazioni tra numeri a virgola mobile:
arrotondamento al numero più vicino (il default)
arrotondamento verso +Inf
arrotondamento verso 0
arrotondamento verso -Inf
L'arrotondamento al numero più vicino funziona nel seguente modo:
una volta determinata il numero di cifre del risultato da tenere;
si incrementa l' ultima cifra di 1 se la cifra successiva è > 5 o 5 seguito da almeno una cifra
non nulla;
si lascia invariata l' ultima cifra se la successiva è < 5;
se la cifra successiva all' ultima è 5 seguito da zeri si incrementa l' ultima di 1 se è dispari
mentre la si lascia invariata se pari.
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
32 Copyright © 2013 – Ing. Daniele Corti
Esempi:
6.826 -> 6.83
6.823 -> 6.82
6.82501 -> 6.83
6.82500 -> 6.82
6.855 00 -> 6.86
Conseguenze della rappresentazione dei reali sulle proprietà dell'aritmetica
Le principali caratteristiche della rappresentazione dei reali che influenzano le proprietà
dell'aritmetica sul computer sono:
i) il numero finito di cifre significative,
ii) il numero finito di reali,
iii) la loro non uniformità e
iv) la rappresentazione mediante una base diversa da quella usuale ( 2 invece di 10).
Vediamo più da vicino come questi fattori intervengono nel caso della rappresentazione mediante 32
bit. Le modifiche per il caso a 64 bit sono ovvie e lasciate come esercizio.
La proprietà i) implica che, dato un numero rappresentato sul computer esiste più di un numero B
(non solo B=0) che soddisfa l’equazione
A + B = A
è sufficiente che B sia più piccolo di A in valore assoluto per più di un fattore 2-23 perché sommare A
a B divenga equivalente a sommare 0 ad A.
Rapportando i valori alla più usuale base 10, possiamo considerare che una mantissa di 24 cifre
binarie significative (incluso il bit nascosto) corrisponde approssimativamente a 7 cifre decimali
significative. Se sommiamo due numeri decimali rappresentati con sole con 7 cifre significative che
differiscono per più di 7 ordini di grandezza, il risultato (entro le sette cifre significative) è
indistinguibile dal maggiore tra i due addendi.
Si definisce precisione macchina (e si indica spesso con la lettera greca epsilon) la distanza tra 1.0 ed
il successivo numero con virgola rappresentabile esattamente.
La proprietà ii) è all’origine della possibilità di uscire al di fuori dell’intervallo dei valori
rappresentabili mediante le operazioni aritmetiche. Se lo "sfondamento" è nella direzione di andare
al di là del massimo valore assoluto possibile, si parla di overflow, mentre se si arriva a valori
inferiori al più piccolo valore denormalizzato diverso da zero, si parla di underflow e il
risultato viene considerato esattamente uguale a zero.
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
33 Copyright © 2013 – Ing. Daniele Corti
La proprietà iii) discende anch'essa dalla precisione finita: la minima distanza non nulla tra due reali
è dell’ordine di 10 -45 attorno allo zero mentre diviene dell’ordine di 10 31 in prossimità dell'estremo
superiore dell’insieme.
Infine occorre aver coscienza anche del punto iv) per poter comprendere come mai conti fatti a partire
da costanti numeriche descrivibili esattamente con un numero finito di cifre significative in notazione
decimale possano corrispondere a calcoli approssimati in corrispondenza di valori per cui non esiste
una conversione binaria dotata di un numero finito di cifre significative.
Anche qui un esempio può aiutare a capire. Consideriamo il risultato della divisione 1/10.
In base 10 è esprimibile con un numero finito di cifre decimali diverse da zero (1/10 = 0.100000...10).
Pertanto la rappresentazione finita ottenuta troncando gli zeri finali non introduce nessuna inesattezza
nella rappresentazione decimale.
In base 2 lo stesso numero è rappresentato da 0.000110011001100110011... 2 cioè corrisponde ad una
rappresentazione periodica di periodo 0011 (e antiperiodo 0). Se abbiamo solo n bit per rappresentare
questo numero dovremo necessariamente approssimarlo (troncando o arrotondando). Una
conseguenza pratica importante è che, mentre in aritmetica decimale con un numero finito di cifre i
prodotti n*0.1 (n=1, 2, 3, ...) assumono periodicamente valori in cui la parte decimale è tutta nulla, in
aritmetica binaria con un numero finito di cifre questo non è più vero.
Da questa peculiarità della rappresentazione dei reali si ricava che possiamo considerare un numero
con virgola del computer come un'approssimazione del valore vero a meno di un errore relativo,
dipendente dal numero, maggiorato dalla precisione macchina (a rigore, nel caso di aritmetica con
arrotondamento, l'errore relativo è maggiorato da epsilon/2 a meno di correzioni in epsilon2, tuttavia,
se siamo interessati all' ordine di grandezza dell'errore, la differenza tra epsilon ed epsilon/2 è
inessenziale sia per la rappresentazione a 32, sia per quella a 64 bit). Quindi in generale potremo
scrivere:
xcomp=x(1+ex) dove |ex|<epsilon dipende da x.
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
34 Copyright © 2013 – Ing. Daniele Corti
SISTEMI ESADECIMALI E OTTALI
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
35 Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
36 Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
37 Copyright © 2013 – Ing. Daniele Corti
ESERCIZI
Esercizio 1 - codifica dei numeri positivi
Codificate i seguenti numeri nella corrispondente rappresentazione decimale:
(numeri nella rappresentazione binaria)
o 1012 = 510
o 10112 = 1110
o 11012 = 1310
o 100000012 = 12910
o 110011002 = 20410
o 111111112 = 25510
(numeri nella rappresentazione ottale)
o 678 = 5510
o 1018 = 6510
(numeri nella rappresentazione esadecimale)
o 6716 = 10310
o 10116 = 25710
o ac316 = 275510
o b2d16 = 286110
Codificate i seguenti numeri nella corrispondente rappresentazione binaria:
o 810 = 10002
o 710 = 1112
o 6010 = 1111002
o 28110 = 1000110012
Verificate i risultati convertendoli nella rappresentazione decimale.
Dato il numero 86210 qual è il numero minimo di bit che si devono usare per la sua
rappresentazione binaria?
Numero minimo di bit = 10 (86210 = 11010111102)
Da base 10 a base 2 - Conversione da decimale a binario Supponiamo di avere un numero decimale per esempio il 2710. Rappresentiamolo in notazione binaria.
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
38 Copyright © 2013 – Ing. Daniele Corti
Applichiamo il metodo delle divisioni successive; dividiamo per 2 la parte intera, e teniamo il resto; dividiamo ancora per 2 la parte intera ottenuta dalla precedente divisione, e teniamo il resto. Proseguiamo in questo modo finché non si ottiene il valore 0 come risultato della divisione:
27:2 = 13 resto = 1 13:2 = 6 resto = 1 6:2 = 3 resto = 0 3:2 = 1 resto = 1 1:2 = 0 resto = 1
Se mettiamo in ordine i resti ottenuti partendo dall'ultimo e mettendolo come primo a sinistra, otteniamo: 11011 che è un numero binario che è uguale a 2710.
Da base 2 a base 10 - Conversione da binario a decimale Utilizziamo la notazione posizionale per convertire un numero (intero) da binario a decimale. Occorre moltiplicare ogni cifra binaria per 2n, dove n rappresenta la posizione della cifra (n=0 per la prima cifra a destra). Dato il numero binario 1001110, moltiplichiamo ogni cifra per il rispettivo peso:
Peso 26 25 24 23 22 21 20
Cifra 1 0 0 1 1 1 0
1 * 26 = 64 (bit più significativo) 0 * 25 = 0 0 * 24 = 0 1 * 23 = 8 1 * 22 = 4 1 * 21 = 2 0 * 20 = 0 (bit meno significativo) Quindi sommiamo i risultati ottenuti e otteniamo il numero decimale: 64 + 0 + 0 + 8 + 4 + 2 + 0 = 7810
A questo indirizzo trovate un applicativo online per effettuare le conversioni automaticamente (da utilizzare come verifica dei risultati da voi ottenuti): http://www.new-software.ch/temp/codici-numerici.php
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
39 Copyright © 2013 – Ing. Daniele Corti
TABELLA DI CONVERSIONE
Utilizziamo questa tabella che consente la conversione di un numero intero compreso fra 0 e 15 in
un numero binario.
DECIMALE BINARIO
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1
10 1 0 1 0
11 1 0 1 1
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
40 Copyright © 2013 – Ing. Daniele Corti
12 1 1 0 0
13 1 1 0 1
14 1 1 1 0
15 1 1 1 1
ESERCIZI
CONVERSIONE
Per rappresentare in binario un numero in decimale di quanti bit ho bisogno?
C <= 2n
C = Numero di combinazioni
n = numero_bit
Esempio 1
Quanti bit ho bisogno per rappresentare il numero decimale 120?
120 <128=27
Ho bisogno di almeno 7 bit.
Esempio 2
Se utilizzo 10 bit quanti combinazioni posso creare?
210 = 1024
Esempio: numero reale (virgola fissa)
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
41 Copyright © 2013 – Ing. Daniele Corti
27,7510
16 8 4 2 1 0,5 0,25 0,125 0,0625
27,437510
16 8 4 2 1 0,5 0,25 0,125 0,0625
1 1 0 1 1 0 1 1 1
27 / 2
13,5 13 1
6,5 6 1
3 3 0
1,5 1 1
0,5 0 1
NB: 11011 è un numero binario palindromo
0,4375 x 2
0,875 0,875 0
1,75 0,75 1
1,5 0,5 1
1,0 0 1
RISULTATO
SENZA PARTE
INTERA
RISULTATO CON
PARTE INTERA
PARTE INTERA
RISULTATO CON
PARTE INTERA
RISULTATO SOLO
CON PARTE
INTERA
RESTO DELLA
DIVISIONE
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
42 Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
43 Copyright © 2013 – Ing. Daniele Corti
Esercizi da svolgere
CODIFICA: DA DEC A BIN
ES1: 4310 N2 ?
43:2= 1010112
43 2
21 1
10 1
5 0
2 1
1 0
0 1
DECODIFICA: DA BIN A DEC
ES2: 1101102 N10 ?
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica
44 Copyright © 2013 – Ing. Daniele Corti
32 16 8 4 2 1
1 1 0 1 1 0
32+16+4+2=5410