Sei sulla pagina 1di 44

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

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.

2
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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.

3
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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:

4
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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. 1+1=
 I numeri in base 2 saranno scritti invece come 10102 e 10112. 10 ?????
impossibil
e

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:

5
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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).

6
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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

7
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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.

8
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

Esempio: 4010
40 2
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 DECBIN

Esempio (4 bit): 11102

8=23 4=22 2=21 1=20


1 1 1 0

Esempi importanti (n=8):

n 1 1 1 1 1 1 1 1
2 -1 = 255

9
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

n-1
2 -1 = 127 0 1 1 1 1 1 1 1

n-1
2 = 128 1 0 0 0 0 0 0 0

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

10
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

Cioè 257.

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 2 n-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 2 n – 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 -2 n-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

11
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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
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

12
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

1 0 0 1 9
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
CMP2 0 0 0 0 0 CMP2
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

13
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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
14
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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

15
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

DEC  BIN
Dato un numero decimale, è necessario distinguere la parte intera da quella frazionaria:

16
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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

17
Copyright © 2013 – Ing. Daniele Corti
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

Metodo 2 (pratico)
Parte intera: vedi BINDEC

Parte frazionale: vedi BINDEC

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

19
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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

c c-1 c-1
(2 - 1), e se sono numeri interi con segno da -2 a (2 - 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.
20
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

 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:

21
Copyright © 2013 – Ing. Daniele Corti
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

APPROFONDIMENTO - NUMERAZIONE IN VIRGOLA


MOBILE

26
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

Rappresentazione dei numeri con la virgola mobile - cifre significative.

27
Copyright © 2013 – Ing. Daniele Corti
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

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

29
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

cifre 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

30
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

seconda del valore di S (0 o 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.

31
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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.

32
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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 epsilon 2,
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.

33
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

SISTEMI ESADECIMALI E OTTALI

34
Copyright © 2013 – Ing. Daniele Corti
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

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 27 10. Rappresentiamolo in notazione
binaria.

37
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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 2 n, 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

38
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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

12 1 1 0 0

39
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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)
27,7510

40
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

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

RISULTATO CON RISULTATO SOLO RESTO DELLA


PARTE INTERA CON PARTE DIVISIONE
INTERA

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 CON RISULTATO PARTE INTERA


PARTE INTERA SENZA PARTE
INTERA

41
Copyright © 2013 – Ing. Daniele Corti
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

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 ?

43
Copyright © 2013 – Ing. Daniele Corti
Unità Didattica 2. Numerazione binaria, codifica delle informazioni ed elementi di logica

32 16 8 4 2 1
1 1 0 1 1 0

32+16+4+2=5410

44
Copyright © 2013 – Ing. Daniele Corti

Potrebbero piacerti anche