RAPPRESENTAZIONE BINARIA DELL`INFORMAZIONE

RAPPRESENTAZIONE BINARIA DELL'INFORMAZIONE
In un calcolatore tutta l'informazione è rappresentata in forma binaria, cioè usando solo due
simboli, usualmente indicati con le cifre 0 e 1 (in inglese 0 e 1 sono detti bit). Si usa anche il
termine digitale, dall'inglese digit (cifra).
La motivazione per limitarsi a due soli simboli è dovuta al fatto che essi possono essere
rappresentati convenientemente con dispositivi fisici; per esempio magnetizzato o no, voltaggio alto
o basso, luce o buio.
CODIFICA DEI NUMERI
Numeri naturali
Noi rappresentiamo i numeri con una notazione posizionale che utilizza 10 cifre (numeri arabici).
Un numero è rappresentato da una sequenza di cifre, e posizionale significa che il valore di una
cifra dipende dalla sua posizione all'interno della sequenza.
Esistono anche altri tipi di notazione per i numeri per esempio additive, dove ogni cifra indica una
quantità da aggiungere o togliere, come il sistema di numerazione romana.
Inoltre è possibile scegliere in molti modi il numero di cifre differenti che si usano in una notazione
posizionale, non solo il 10; in genere si usano anche numerazione in base 2 (binaria), 8 (ottale), 16
(esadecimale).
I codici BCD ( Binary Coded Decimal) sono utilizzati per rappresentare i numeri del sistema
numerico decimale codificandoli cifra per cifra.
Per rappresentare le dieci cifre decimali, un codice BCD richiede almeno 4 bit. Lo scopo della
codifica è quello di permettere l'immediata conversione da decimale a binario e viceversa.
Nel codice BCD- 8421 i bistabili del contatore assumono i pesi Q0=20; Q1=21; Q2=22, Q3=23
Nel sistema binario si usano le cifre 0 e 1. La base 2 è quella più piccola teoricamente possibile per
un sistema di numerazione. Il valore posizionale è legato alle potenze di 2.
Nel sistema ottale si usano 0,1,2,3,4,5,6,7. Il valore posizionale è legato alle potenze di 8.
Nel sistema esadecimale si usano 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Il valore posizionale è legato alle
potenze di 16.
Esempi di conversione da base p a base decimale

Esempio 1:
Codifica decimale p=10
N10=5870
5870 = 5 * 103 + 8 * 102 + 7 * 101 + 0 * 100

Esempio 2:
Codifica binaria p=2
N2=101001011
1010010112=1 * 28 + 0 * 27 + 1 * 26 + 0 * 25 + 0 * 24 + 1 * 23+0 * 22+1 * 21+1*20= 33110

Esempio 3:
Codifica ottale p=8
N8=5348
5348= 5 * 82+3 * 81+4= 34810

Esempio 4:
Codifica esadecimale p=16
N16=B7F
B7F16= 11 * 162+7 * 161+15= 294310
Numeri interi
Esistono due modi per rappresentare i numeri interi, supponiamo di usare m bit

modulo/segno
il primo bit rappresenta il segno (0 per il + e 1 per il -), i rimanenti n-1 bit rappresentano il
modulo (un naturale)

complemento a 2
un numero negativo -N è rappresentato dalla rappresentazione binaria di (2 alla m) - N,
quelli positivi come al solito.
Esempio:
usando 4 bit i numeri 5 e -5 sono rappresentati rispettivamente da
 modulo/segno
0101 e 1101

complemento a 2
0101 e 1011
Infatti:
m=4 (numero di bit)
N=5 (numero da rappresentare)
5 - > 0101
-5 - > Complemento a 2: 2m –N - > 10000 0101 =
1011
In un codice a 8 bit quindi esistono in tutto 256 parole. Se volessimo allora servircene per
rappresentare dei numeri, potremmo codificare in tutto 256 numeri, da 0 a 255.
Per i numeri maggiori di 255 sarebbe necessario servirsi di parole formate da più di 8 bit. Per
esempio, il numero 84.554, nel sistema di numerazione binario, richiede ben 17 bit.
Esistono tuttavia particolari codici numerici che consentono di rappresentare qualsiasi numero con
parole di pochi bit. Uno di questi è il cosiddetto codice BCD (codice binario decimale), che è un
codice a 4 bit che si basa sulla corrispondenza mostrata dalla tabella:
0
1
2
3
4
5
6
7
8
9
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
In questo codice si rappresenta qualunque numero del sistema decimale associando a ogni sua cifra
la rappresentazione della stessa cifra nel sistema binario.
In sostanza, il sistema binario non viene utilizzato per rappresentare il numero, ma per rappresentare
ciascuna sua cifra.
Per esempio, il numero di quattro cifre 5973 è rappresentato con quattro sequenze di parole a
quattro bit come segue: 0101 1001 0111 0011
Numeri reali
Non è possibile rappresentare tutti i numeri reali utilizzando sequenze finite di bit (problema di
cardinalità: l'insieme delle sequenze finite di bit è numerabile, mentre i reali hanno la cardinalità del
continuo), pertanto rappresenteremo solo dei numeri razionali.
Rappresentazione in virgola fissa
Si rappresentano la parte intera e quella frazionaria di un numero reale con due sequenze di bit; la
pare intera come visto sopra, mentre la parte frazionaria è rappresentata come un numero naturale
ma utilizzando esponenti negativi della base (basta notare che, per esempio, 0,34 in base 10
rappresenta (3/10) + (4/100)).
Quindi basta decidere quanti bit usare per la parte intera e quanti per la frazionaria.
Con questa rappresentazione non si riescono a rappresentare molti numeri ed in genere solo numeri
piuttosto piccoli; per esercizio quanti/quali numeri si rappresentano con 5+5 bit ?
Rappresentazione in virgola mobile (floating point)
Ricordarsi che nel mondo anglossasone si usa il punto e non la virgola per la parte frazionaria).
Un numero reale può essere visto come
dove M (detta mantissa) è un numero frazionario cioè compreso tra -1 e 1, ed n un numero intero
(detto caratteristica)
In questo caso basta decidere quanti bit usare per la mantissa e quanti per la caratteristica.
Con questa rappresentazione si possono rappresentare numeri molto grandi e numeri molto piccoli.
Per rappresentare i numeri reali, avremmo bisogno di estendere i pesi verso destra, continuando a
decrementare l’esponente : 10-1, 10-2, 10-3, ... ottenendo tutte le cifre decimali che vogliamo.
In modo analogo operano i computer solo che, anziché usare il sistema decimale, usano quello
binario. Quindi il loro insieme di cifre è composto solo di due simboli :{0,1}, e di conseguenza i
pesi si otterranno con le potenze di 2 dato che due è la base del sistema.
Peso:
Cifra:
23 22 21 20 2-1 2-2 2-3
1 0 1 1 0 1
0
Valore: 8*1+4*0+2*1+1*1+0.5*0+0.25*1+0.125*0=11.25
In questo esempio ho usato una rappresentazione a 7 bit, dove tra il quarto e il quinto bit abbiamo
posto la nostra ipotetica virgola. Questa è quella che viene chiamata una rappresentazione a virgola
fissa.
Dall’ultimo esempio si può notare che la precisione massima è di 1/8, ma come dicevo prima basta
aggiungere altri bit a destra per aumentarla, o in alternativa spostare la virgola verso sinistra, ma
facendo in questo modo riduciamo il numero massimo rappresentabile.
Per quanto riguarda la rappresentazione in virgola mobile, si sfrutta il concetto della notazione
scientifica dei numeri, ossia:
N=Mxe dove N è il numero da rappresentare, M la frazione o mantissa, x la base numerica(che nel
nostro caso sarà 2, visto che il numero è rappresentato in binario), ed e è l’esponente.
Per capire la notazione in virgola mobile, analizziamo la procedura usata per convertire i numeri. E
quindi vediamo che nella notazione scientifica 2.500.000.000 si può scrivere come 2,5*109. Ma
cosa abbiamo fatto per raggiungere questo risultato? Semplicemente abbiamo spostato la virgola
fino alla prima cifra significativa e abbiamo aggiunto all’esponente, il numero di cifre attraversate
dalla virgola.
La prima cosa da evidenziare è che qualsiasi numero si può scrivere come: x = x/1*1 = x/100*100.
Quindi se registriamo il risultato della frazione e dell’esponente, possiamo ottenere infinite
rappresentazioni di un qualsiasi numero. Infatti aumentando il valore dell’esponente otterremo tutte
rappresentazioni diverse dello stesso numero.
2 500 000 000/100*100  2500000000 * 100  (2500000000,0)
2 500 000 000/101*101  250000000 * 101  (250000000,1)
2 500 000 000/102*102  2500000 * 102  (25000000,2)
…
2 500 000 000/108*108  25 * 108  (25,8)
Nella rappresentazione in virgola mobile avviene la stessa cosa, dove i bit vengono mappati in
modo che il primo rappresenti il segno, e i successivi divisi in due gruppi, uno per l’esponente e
l’altro per la mantissa.
S
1..7
8..31
In questa particolare mappatura, abbiamo 24 bit per la mantissa che ci permettono di rappresentare
tutti i numeri da 0 a 224–1 = 16 777 215 che corrispondono a 7 cifre decimali, con un esponente di 7
bit(0..127) che viene rappresentato in complemento a due, cioè in modo che i valori possibili
vengano considerati positivi da 0 a 63 e negativi da 64 a 127.
La rappresentazione in complemento a due, potrebbe sembrare bizzarra visto che si sarebbe potuto
usare un bit per il segno, ma senza entrare nei particolari, per motivi relativi all’hardware risultano
molto più semplici da manipolare.
Ma come al solito arrivo alla fine con i numeri che stupiscono, infatti con una rappresentazione a 32
bit mappati nel modo precedente, possiamo rappresentare un range di valori che vanno da  1,6*1064
a  1.6*1063 con una precisione di 7 cifre decimali significative. Mentre con una rappresentazione
in virgola fissa, posta nel centro(tra il bit 15 e 16), saremmo arrivati  32768(circa  3,2*104), con
una precisione di 8 cifre(4 per gli interi e 4 per i decimali). Per cui è chiaro il vantaggio che si ha
nell’adottare la rappresentazione in virgola mobile, con cui si ha meno precisione, ma con la
possibilità di rappresentare numeri infinitamente più grandi o più piccoli.
Problemi/conseguenze
Rappresentare i numeri in forma binaria utilizzando un numero fissato di bit porta a varie
consequenze e pone dei problemi che occorre aver chiaro quando si scrivono programmi.
Undeflow/Overflow
In ogni calcolatore un numero fissato di bit verrà usato per rappresentare i numeri (siano interi o
reali); per esempio per gli interi si usano in genere 32/64 bit.
Effettuando delle operazioni su numeri rappresentati con n bit si può ottenere anche un numero non
rappresentabile con tali bit; se il numero è troppo grande si parla di overflow, altrimenti di
underflow.
Approsimazione/errore
I numeri reali sono rappresentati come approssimazioni razionali, e quindi modulo un certo errore,
ma effettuando delle operazioni su tali numeri l'errore può modificarsi; pertanto occorre tenerne
conto per prevedere i possibili effetti.
Per esempio la somma può non essere associativa
(es. (2 alla 32 + 3)+(-3) origina overflow, mentre 2 alla 32 + (3+(-3)) no);
a * (b /a) può essere differente da b;
quantità che dovrebbero essere zero non lo sono e così via.
CODIFICA DEI CARATTERI
I caratteri sono rappresentati con una codifica ad hoc usando un certo numero di bit; sono possibili
molte scelte, quelle utilizzate attualmente sono degli standard.
Il più noto è lo standard ASCII che utilizza 7 bit e contiene quindi 128 caratteri, che includono
letttere maiuscole e minuscole, cifre, segni di punteggiatura, lo spazio vuoto, detto anche blank, e
caratteri di controllo dell'impaginazione, come fine linea, tabulazione, fine pagina.
Standard più moderni, utilizzati per esempio nelle pagine WEB, sono:

ISO LATIN 1
o Questo codice usa 8 bit, quindi 256 caratteri diversi.
o Oltre ai caratteri ASCII, ISO Latin-1 contiene vari caratteri accentati e lettere usate
dai linguaggi dell’Europa occidentale (Italiano, Francese, Spagnolo, Tedesco,
Danese, etc)
IMMAGINI, SUONI, VIDEO
Anche altri tipi di informazione possono essere rappresentati come sequenze di bit, pensare al suono
digitale dei CD e alla prossima televisione digitale.
L'idea base per rappresentare un'immagine è decomporla in punti, usualmente detti pixel (in origine
gli elementi dello schermo), e definire per ogni punto il suo colore (o gradazione di grigio).
Pertanto un'immagine è essenzialmente una matrice i cui elementi descrivono bianco o nero (1 bit
per pixel); gradazione di grigio (8 toni 3 bit, 16 toni 4 bit,...), oppure un colore, rappresentato per
esempio dicendo quanto rosso, blu e verde contiene (sistema RGB Red, Green and Blu) usando
percentuali.
Dato che le immagini possono richiedere un numero enorme di bit per essere rappresentate
adeguatamente esistono metodi per compattarle e vi sono anche degli standard, come GIF, TIFF,
JPEG, ....
I video sono solo sequenze di immagini opportunamente compattate, mentre per i suoni si usano
tecniche basate sulla rappresentazione di un suono come insieme di onde.