Sistemi di numerazione

annuncio pubblicitario
Sistemi di numerazione e codificazione in informatica.
Redatto da Laura LENZI
SISTEMI DI NUMERAZIONE
I numeri sono composti da cifre e appartengono a un determinato sistema di
numerazione. Tutti i sistemi di numerazione usati al giorno d’oggi sono posizionali cioè
tali per cui il valore di una cifra dipende dalla sua posizione all’interno di un numero. I
sistemi di numerazione servono per rappresentare una serie infinita di numeri attraverso
un insieme finito di caratteri opportunamente combinati detti cifre. Il numero delle diverse
cifre è uguale alla base del sistema di numerazione. Per esempio nel caso del sistema
di numerazione decimale la base del sistema è costituita da dieci cifre, i numeri da 0 a 9,
nel sistema binario da due (da 0 e 1), nel sistema esadecimale da sedici (da o a 9, A fino
a F), nel sistema ottale (da 0 a 7). Quanto maggiore è la base, tanto minore è il numero di
cifre necessario per rappresentare un numero. In generale possiamo dire che se
indichiamo con B la base del sistema di numerazione le cifre che compongono tale
base vanno da 0, la minima, a B-1, la massima. La crescita del valore di un simbolo a
seconda della posizione occupata è in diretta relazione alla base scelta. La forma
normalizzata di un numero nel sistema posizionale è:
z = m*bn dove:
z: numero
m: mantissa
b: base del sistema posizionale
n: esponente
Nei numeri non interi un segno di suddivisione (virgola o punto) divide la mantissa in
cifre prima (a sinistra) e dopo (a destra) il segno.
Nel sistema decimale la forma normalizzata è z= m* 10n .
I numeri decimali possono essere rappresentati in forma abbreviata o in forma normale.
Nel caso della forma abbreviata il segno di suddivisione, cioè la virgola, stabilisce il
valore posizionale (o peso) delle singole cifre. Ad ogni posizione corrisponde una
1
diversa potenza del dieci. Leggendo da sinistra a destra: migliaia, centinaia, decine, unità,
decimi, centesimi. Quindi se considero come esempio il numero 1992,35:
1992,35= 1*103 +9*102 +9*101 +2*100 +3*10-1 +5*10-2
Il numero ha quattro cifre prima della virgola decimale e due dopo, possiede quindi in
totale 6 cifre. Nella forma normale la virgola decimale e la potenza di dieci determinano il
valore posizionale delle singole cifre. Per esempio consideriamo il numero:
z= 1,99235*103 che ha 6 cifre di cui una prima della virgola decimale. La forma normale
può essere trasformata in altre rappresentazioni in base 10, secondo le regole di calcolo
dell’aritmetica. Per esempio:
z= 19,9235*102 = 199.235*101= 0,199235*104.
Nel sistema binario la forma normalizzata è:
z= m*2n
Ci sono solo due cifre 0 e 1, il segno di suddivisione è di solito il punto anziché la virgola.
Per esempio: z= 110001.012 . Ad ogni posizione corrisponde una diversa potenza del
due, quindi:
z= 1*25+1*24+0*23+0*22+0*21+1*20+0*2-1+1*2-2
Il numero ha otto cifre binarie di cui due dopo il punto.
Nel
sistema
esadecimale
come
abbiamo
già
detto
ci
sono
sedici
cifre
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f; la mantissa è:
z= m*16n .
E’ un sistema molto usato perché è in grado di rappresentare un semibyte (4 bit) con un
unica cifra: 4 celle di memoria permettono la codificazione di un numero binario a 16 cifre
diverse senza segno. Per esempio z=1A3B16 . Ad ogni posizione corrisponde un diversa
potenza di sedici, quindi:
z= 1*163+A*162+3*161+B*160. Espresso in sistema decimale: 4096+2560+48+11=6715
z1= 1A.3B16 = 1*161+ A*160 + 3*16-1 + B*16-2 che espresso in sistema decimale è:
16+10+(3/16)+(11/256)=26,2305.
Nel sistema ottale la forma normalizzata è:
2
z= m*8n
Ci sono otto cifre diverse, 0,1,2,3,4,5,6,7. I numeri ottali compreso il loro segno, utilizzno
completamente un semibyte (4 bit). Per esempio:
z= 12348 = 1*83 +2*82 + 3*81 +4*80 = 512+128+24+4 = 66810 .
Consideriamo un numero intero N costituito da n cifre nella base B, che indichiamo con
(N)B, lo rappresentiamo con la sequenza ordinata di cifre (stringa):
Cn-1 Cn-2 .................. C1 C0
dove la cifra generica Ci è una cifra dell’insieme finito C di n caratteri di un sistema di
numerazione, C0 viene definita come la cifra meno significativa (LS: less significative) e
Cn-1 è la cifra più significativa (MS: more significative). La stringa è quindi una sequenza
ordinata di cifre.
In generale possiamo dire che un sistema di numerazione è costituito da:
1) un insieme C finito di n caratteri detti anche simboli grafici o cifre;
2) un codice, cioè un insieme di regole che permette di associare ed interpretare un
gruppo ordinato di cifre rappresentante un dato numero;
3) algoritmi per l’esecuzione delle operazioni fondamentali, cioè regole che dati i codici
degli operandi permettono di ricavare il codice risultato dell’operazione.
Le regole fondamentali del codice dei sistemi di numerazione sono quattro (regole con
cui si scrivono i numeri):
1) le cifre sono ordinate in modo che ognuna abbia un valore di una unità più elevato di
quella che la precede;
2) le cifre hanno valore posizionale (peso) cioè dipendente dalla posizione nella
configurazione del numero e cresce con l’aumentare delle posizioni da destra a sinistra;
3) se la quantità da contare è superiore al numero n di cifre deve essere effettuato il
riporto di 1 che si somma alla cifra immediatamente a sinistra;
4) la tecnica del riporto viene applicata alle successive cifre a sinistra.
Vediamo le modalità di rappresentazione di tre tipologie di numeri diverse:
a) Numeri interi.
3
Un numero intero N con n cifre lo rappresentiamo con la scrittura:
Cn-1 Cn-2 ...... C1 C0. La forma polinomiale è la seguente:
(N)B = Cn-1 Bn-1 + Cn-2 Bn-2 + ......... + C1B1+ C0 B0 , le cifre del nostro numero sono i
coefficienti presso le corrispettive potenze della base del sistema numerico. Vediamo un
esempio con B=10 caso del numero
325610 = 3*103 + 2*102 + 5*101 + 6*100 .
Vediamo un altro esempio nel caso in cui invece la base sia B=2.
Il numero è: 11012 = 1*23 + 1*22 + 0*21 + 1*20= (8+4+0+1)10 = 1310
Vediamo un ultimo esempio con un numero nel sistema esadecimale. Il numero è:
7C916 = 7*162 + 12*161 + 9*160 = 199310 (Bn-1 è il valore posizionale, Cn-1 è il
coefficiente relativo ad ogni posizione). Nei sistemi numerici posizionali ogni cifra cambia
valore a seconda della posizione.
b) Numeri frazionari.
Un numero frazionario N’ con m cifre lo rappresentiamo con la scrittura:
0. C-1 C-2 .......... C-(m-1) C-m
dove abbiamo introdotto il punto radice (.) che sostituisce la virgola nella notazione
anglosassone usata nelle applicazioni del calcolo automatico. Nel caso di numeri
frazionari la forma binomiale è:
(N’)B = C-1B-1+ C-2B-2 + .................+ C-m B-m.
Vediamo un esempio con un numero che ha una base B=10:
0,323510 = 3*10-1+ 2*10-2 + 3*10-3 + 5*10-4.
0,1011012 = 1*2-1 + 0*2-2 + 1*2-3 + 1*2-4 + 0*2-5 + 1*2-6 = (1/2)+(1/8)+(1/16)+(1/64)=
(45/64).
c) Numeri misti.
Un numero misto N’ lo rappresentiamo con la struttura:
Cn-1 Cn-2 Cn-3 .......... C1 C0 . C-1 C-2 ........... C-m.
dove Cn-1 è la cifra più significativa mentre C-m è quella meno significativa. La forma
polinomiale è:
4
(N’)B = N+N’ = Cn-1Bn-1+Cn-2Bn-2+Cn-3Bn-3 + ....... + C1B1+C0B0+C-1B-1+
+C-2B-2 +.........+C-mB-m.
La rappresentazione di un numero misto comprende quella di un numero intero e di un
numero frazionario; per il primo, il numero m della parte frazionaria è zero ed è omesso il
punto radice o comunque è inteso in modo tale da lasciare la sequenza di cifre alla
sinistra, mentre per il secondo il numero di n cifre intere è nullo e il punto radice lascia alla
sua destra tutte le cifre della parte frazionaria. Vediamo alcuni esempi di numeri misti:
34,5 = 3*101 + 4*100 + 5*10-1 (in base 10)
101,11 = 1*22+0*21+1*20+1*2-1+1*2-2 = 4+1+(1/2)+(1/4) = 5+(3/4) = (23/4) (in base 2)
Fissata una base B (B2) esiste una corrispondenza biunivoca fra numeri e stringhe,
infatti ad ogni stringa corrisponde uno e un solo numero e viceversa. Al variare della base
uno stesso numero è rappresentato da stringhe diverse e una stessa stringa rappresenta
più numeri. Si può dimostrare che il numero N di valori numerici rappresentabili con una
stringa di n cifre di una base B è N=Bn cioè possiamo scrivere i numeri compresi fra 0 e
Bn-1.
Gli algoritmi di calcoli aritmetici non cambiano passando da un sistema di numerazione ad
un altro. L’algoritmo della somma con sistemi numerici posizionali occorre mettere in
corrispondenza le cifre che si trovano nella stessa posizione.
Addizione e di sottrazione nel sistema decimale. L’addizione e la sottrazione di due
numeri decimali con gli stessi esponenti avviene attraverso l’addizione/sottrazione delle
due mantisse:
z1 ± z2 = (m1 ± m2) * 10n
Moltiplicazione e divisione nel sistema decimale. La moltiplicazione/divisione di due
numeri decimali con gli stessi esponenti avviene moltiplicando/dividendo le mantisse e
addizionando/sottraendo gli esponenti:
z1*z2 = (m1*m2) * 10 (n1+n2)
z1/z2 = (m1/m2) *10 (n1-n2)
Nel caso dei numeri binari l’addizione avviene sulla base della seguente tabella:
0+0 = 0
5
0+1 = 1
1+0 = 1
1+1 = (10) 0 e riporto di 1.
Vediamo un esempio: 10011011.11+11001010.01=
10011011.11+
11001010.01=
101100110.00
La sottrazione di due numeri binari avviene come nel sistema decimale. E’ comunque più
semplice effettuarla trasformando il sottraendo nel suo complemento a due e sommarlo al
suo minuendo (un eventuale riporto dopo l’ultima cifra a sinistra viene ignorato). Vediamo
un esempio:
11001010.0101011011.11=
101100110.10
oppure essendo il complemento a due del sottraendo 10100100.01:
11001010.01+
10100100.01=
101100110.10
La moltiplicazione e la divisione avvengono sulla base di queste semplici regole:
0*0 = 0
0*1 = 0
1*0 = 0
1*1 = 1
L’aritmetica dei numeri esadecimali e ottali ha le stesse regole di quella dei numeri
decimali.
Nota: il sistema posizionale ha lo stesso algoritmo di calcolo
1
0
1
1
Accumulatore
1
0
0
1
Buffer register
ALU
Nel caso in cui ci siano dei riporti questi vengono memorizzati in un registro che si chiama
FLAG REGISTER.
La scelta del sistema di numerazione dipende dalla situazione. Normalmente nei calcoli a
mano si utilizza il sistema decimale, negli elaboratori invece vengono considerati anche
6
altri aspetti come per esempio il fatto che con il sistema esadecimale richiede un minor
spazio di memoria. Se si utilizza un’apparecchiatura di elaborazione dati il sistema di
numerazione deve essere reso comprensibile al calcolatore. La rappresentazione dei
numeri per l’uso del calcolatore è un caso particolare di codifica o codificazione.
Occorre distinguere tra rappresentazione (codificazione di numeri in una forma
comprensibile al calcolatore ) e conversione (trasformazione di numeri da un sistema di
numerazione in un altro). Per quanto riguarda la rappresentazione cioè il fatto di codificare
i numeri per renderli comprensibili al calcolatore, attualmente ci si riferisce esclusivamente
al sistema binario in quanto l’elettronica dell’elaboratore è basata proprio su questo
sistema di numerazione in quanto le sue componenti possono avere solo due condizioni
stabili. Nel futuro le cose cambieranno in quanto nei calcolatori ottici gli elementi potranno
avere più di due condizioni stabili e quindi sarà possibile una codificazione in decimale. Il
difetto del sistema di numerazione binaria è che richiede troppo spazio nella memoria.
I codici sono delle leggi di rappresentazione che assegnano in modo univoco ad ogni
simbolo della grandezza originaria un simbolo o una sequenza di simboli della nuova
grandezza. Per esempio il codice binario fa corrispondere ad ogni simbolo dei numeri
decimali, univocamente, una sequenza di simboli binari. La maggior parte dei codici è
invertibile cioè a sequenze di simboli della grandezza originaria corrispondono sequenze
di simboli della nuova grandezza e viceversa. La trasformazione dalla grandezza
originaria a quella nuova si chiama codifica (o codificazione), il procedimento inverso
decodifica (o decodificazione). Quindi in pratica ogni sistema di numerazione può essere
convertito in qualunque altro sistema di numerazione, esiste una corrispondenza
biunivoca tra i sistemi numerici.
Nella pratica informatica i codici oltre che essere invertibili devono essere:
 il più possibile compatti in modo che i tempi di trasmissione e la richiesta di memoria
rimangano ridotti;
 il codice deve avere ampia tolleranza nei confronti di errori di codifica e di trasmissione;
 le grandezze devono essere rappresentate con lunghezza di parola costante, perché
questa è un’esigenza della maggior parte dei calcolatori.
Vediamo alcune regole di conversione tra sistemi di numerazione diversi.
7
Conversione
binario-decimale.
Partendo
dalla
forma
polinomia
otteniamo
la
conversione del numero espresso in binario nel corrispondente numero decimale.
Consideriamo per esempio il numero intero 1101 2:
11012 = 1*23 + 1*22 + 0*21 + 1*20 = 8+4+0+1=13
10110112 = 1*26 + 0*25 + 1*24 + 1*23 + 0*22 + 1*21 + 1*20 =
= 1*64 + 0*32 +1*16 + 1*8 + 0*4 + 1*2 + 1*2 + 1*1 =
= 64 + 16 + 8 + 2 + 1 = 91
Quindi 10110112 = 9110.
La regola pratica per abbreviare le operazioni necessarie è la seguente:
1) Si raddoppia il bit più significativa e si aggiunge il secondo bit.
2) Si raddoppia la somma e si aggiunge il terzo bit.
3) Si procede raddoppiando le somme e aggiungendo i bit successivi fino al bit meno
significativo; l’ultima somma rappresenta il numero decimale.
Vediamo un esempio di questa regola:
1
1
0
2 +1 2 +0
3
6
1
0
0
2 +1 2 +0
2 +0
13
26
52
1
2 +1
105
1
2 +1
211
Quindi 110100112 = 21110
Conversione decimale-binario. Consideriamo separatamente il caso della conversione
della parte intera e della parte frazionaria di un numero in base 10.
Per la conversione della parte intera ricordiamo che il valore decimale di un numero intero
N espresso in forma binaria è:
N = Cn-1 2n-1 + Cn-2 2n-2 + ........... + C121 + C020 dove i valori che le C possono
assumere sono o 0 o 1.
Dividendo ambo i membri di tale equazione per 2 ottengo un quoziente Q 1 e un resto C0:
N/2 = Cn-12n-2 + Cn-22n-3 + .......... +C120 + C02-1 = Q1 + C02-1.
8
Il resto ottenuto C0 costituisce il bit meno significativo del numero binario corrispondente
ad N.
Dividendo successivamente il quoziente Q1per due otteniamo un quoziente Q2 e un resto
C1 cioè:
Q1/2 = Cn-12n-3 + Cn-2 2n-4 +...........+ C2 20 + C12-1
Il resto C1 rappresenta la successiva meno significativa. Procedendo nelle divisioni
successive per 2 finché Qn diventa nullo otterremo come resti tutte le cifre binarie C n-1
Cn-2 ........ C1 C0 che costituiscono la rappresentazione binaria corrispondente al numero
dato N. Il procedimento di conversione si basa allora sui passi del seguente riquadro:
1) Si divide il numero decimale per due fino ad ottenere il quoziente nullo ;
2) si considera la successione dei resti; il primo resto è la cifra meno significativa del
numero binario, mentre l’ultimo resto costituisce la cifra più significativa.
9
Vediamo qualche esempio:
a) conversione in binario di (37)10 :
37
2
18
2
0
9
2
1
4
2
0
2
2
0
1
2
1
0  quoziente nullo
(37)10 = (100101)2
b) conversione in binario di (68)10 :
68
2
34
2
0
17
2
1
8
2
0
4
2
0
2
2
1
1
2
1
0  quoziente nullo
(68)10 = (1000100)2.
La conversione della parte frazionaria di un numero in base dieci si ottiene utilizzando il
metodo delle moltiplicazioni successive. Detta N’ la parte frazionaria, la sua
rappresentazione sarà:
N’ = C-12-1 + C-2 2-2 +............+C-m2-m
Moltiplicando per 2 ambo i membri della precedente uguaglianza otteniamo:
10
2N’ = C-120 + C-22-1 +...............+ C-m2-m+1 = C-1+F1
cioè una parte intera C-1 ed una frazionaria F1.
La cifra C-1 ottenuta rappresenta la cifra meno significativa della rappresentazione
binaria. Moltiplicando successivamente per 2 la parte frazionaria F 1 otteniamo:
2F1 = C-220 + C-32-1 + ..............+ C-m2-m+2 = C-2 + F2
La cifra C-2 ottenuta rappresenta la cifra meno significativa successiva. Il procedimento
continua finché la parte frazionaria si annulla, oppure si raggiunge la precisione voluta di
numero di cifre binarie dopo il punto radice. I passi del procedimento di conversione sono:
1) si moltiplica per due la parte frazionaria del numero in base dieci;
2) la parte intera del prodotto ottenuto è una cifra binaria della parte frazionaria del
numero binario corrispondente al dato;
3) se la parte frazionaria non è nulla oppure non si è ancora raggiunto il desiderato
numero di cifre dopo il punto radice, si considera la parte frazionaria del prodotto e
torna al punto 1) altrimenti ............... ;
4) si scrivono le cifre binari di cui al punto 2 nell’ordine di determinazione.
Vediamo alcuni esempi:
a) convertire in binario il numero frazionario N’ = 0.5625:
0.5625* 2 = 1.1250
0.1250 * 2 = 0.2500
0.2500 * 2 = 0.5000
0.5000 * 2 = 1.0000
La parte intera del prodotto è 1001 dove 1 (+ a sinistra) è il bit più significativo e l’1 + a
destra è quello meno significativo. I due zeri nel mezzo sono le cifre del numero
frazionario binario. Il risultato è quindi: (0.5625)10 = (0.1001)2.
b) convertire in binario con 5 bit frazionari il numero N’ = 0.3562
0.3562 * 2 = 0.7124
0.7124 * 2 = 1.4248
0.4248 * 2 = 0.8496
0.8496 * 2 = 1.6992
0.6992 * 2 = 1.3984
11
La parte intera del prodotto è 01011 ( quinta cifra dopo il punto binario). Il risultato della
conversione è quindi: (0.3562)10 = (0.01011)2.
Il vantaggio del sistema binario è quello di poter esprimere un numero facendo uso di due
soli simboli grafici; ad esso si contrappone però lo svantaggio di stringhe la cui lunghezza
è di gra lunga superiore a quella corrispondente all’espressione dello stesso numero nelle
altre basi.
Il numero di bit necessari per rappresentare un numero N è l’intero che soddisfa la
relazione seguente: 2n-1= N = 2n .
Il massimo numero rappresentabile con n bit è quindi 2 n-1; in particolare per n=2 esso è
22 - 1 = 3, per n=3 otteniamo 23 - 1 = 7, per n=4 risulta 24 - 1 = 15 e così via. Di qui
deduciamo che per determinare il numero di bit necessari per esprimere in binario un
numero N basta determinare il più piccolo numero intero n tale che 2n > N. Per esempio:
a) Se N = 1198 otteniamo 211 = 2048 > 1198 per cui il numero di bit necessario è 11;
b) Se N = 61 otteniamo 26 = 64 > 61 per cui il numero di bit.
Addizione binaria. Le regole dell’addizione di due bit sono sintetizzate nella seguente
tabella:
+
0 1
0
0 1
1
1 0  con riporto di 1 in quanto (1)2 + (1)2 = (10)2
L’addizione di due numeri si esegue quindi tenendo conto dei riporti. Vediamo degli
esempi:
12
a) dati A = 10111
B = 101 otteniamo
111  riporti
10111 +
101 =
11100
1+1 = 10, scrivo 0 e riporto 1
1+1 = 10, 0 e riporto 1
1+1 = 10, 10 + 1= scrivo 1 e riporto 1
1+0 = 1
1
L’addizione di due numeri binaria può essere verificata utilizzando il seguente metodo:
A = 1*24 + 0*23 + 1*22 + 1*21 +1*20 = 16 + 4 + 2 + 1 = 23
B = 1*22 + 0*21 + 1*20 = 4+1 = 5
A + B = 1*24 + 1*23 + 1*22 + 0*21 + 0*20 = 16+8+4 = 28
b) calcolare A+B essendo A = 1011011 e B = 1011010 otteniamo:
1 1 1 1  riporti
A
1011011 +
B
1011010 =
A + B 10110101
bit di riporto
L’esempio mostra che la somma di due numeri binari di n bit può avere n+1 bit.
Sottrazione binaria. Le regole della sottrazione tra due numeri binari possono essere
espresse dalla tabella seguente:

0
1  minuendo
0
0
0
1
0
1

sottraendo
con prestito di 1 in quando (10)2-(1)2 = (1)2
13
La sottrazione di due numeri binari si ottiene con il metodo diretto (cioè secondo le
normali regole) si ottiene come nel sistema decimale tenendo conto degli eventuali
prestiti. Quando il sottraendo è maggiore del corrispondente minuendo dobbiamo
prendere in prestito una unità dalla cifra vicina alla sinistra in modo che la nuova cifra
quella corrispondente del sottraendo; l’unità presa in prestito dobbiamo poi restituirla
aggiungendola alla successiva cifra del sottraendo.
Per verificare l’esattezza dell’operazione eseguita possiamo determinare la somma della
differenza con il sottraendo e confrontarla con il minuendo, oppure si può convertire gli
operandi e il risultato nel numero decimale. Vediamo un esempio:
differenza  01101111+
sottraendo 
In base dieci:
minuendo  10010000
0100001=
differenza  111+
sottraendo 
33=
minuendo  144
Moltiplicazione binaria. Le regole della moltiplicazione di due bit sono riportate nella
seguente tabella:
 0
1  moltiplicatore
0
0
0
1

moltiplicando
Il procedimento della moltiplicazione binaria è simile a quello della
moltiplicazione
decimale; ogni cifra del moltiplicatore genera un prodotto parziale in base al suo valore e
cioè:
se è
1
 il prodotto parziale è uguale al moltiplicatore e
si scorre di un posto a sinistra
se è
0
 il prodotto parziale è uguale a zero e si scorre
di un posto a sinistra
I prodotti parziali vengono poi sommati.
La procedura di moltiplicazione in binario è la seguente:
14
1) Se la cifra del moltiplicatore è 1, copiare esattamente il moltiplicando e spostarsi di una
posizione a sinistra.
2) Se la cifra del moltiplicatore è 0, copiare tutti zeri e spostarsi a sinistra di una posizione.
3) Addizionare i prodotti parziali.
Vediamo un esempio: 1011*
101=
1011
0000
1011
110111
Divisione binaria. La divisione binaria si esegue con lo stesso procedimento che si usa
nel caso dei numeri su base decimale. I passi che devono essere seguiti sono i seguenti:
1) Si confrontano gli n bit più significativi del dividendo con gli n bit del divisore.
2) La prima cifra del quoziente sarà 1 oppure 0 a seconda che il divisore contenga o no il
dividendo.
3) Si applicano successivamente le regole della divisione decimale.
Vediamo qualche esempio:
1001
11
11
011
11*
prova 
11=
11
11
11
11-
0
1001
Secondo esempio:
111011 101
101
1011
1011*
prova 
101=
1001
1011
101
0000-
resto  100
1011110111+
100=  resto
111011
15
Complemento, sottrazione in complemento a due. La sottrazione tra due numeri binari
può essere effettuata anche con due tecniche diverse da quelle viste in precedenza.
Vediamo il procedimento nel caso di due numeri decimali.
5376 - 3717 = 1659. Questa operazione può essere eseguita anche nel modo seguente:
5376 + (10000 - 3717) - 10000 = 5376 + 6283 - 10000 = 1659

complemento a 10 del sottraendo
L’algoritmo di calcolo con l’utilizzo del complemento a 10 nel sistema decimale si svolge
seguendo i seguenti passi:
1) Dati il minuendo e il sottraendo si pareggiano eventualmente le cifre del sottraendo con
degli zeri (“0”) a sinistra più significativa.
2) Si calcola il complemento a dieci del sottraendo.
3) Si addiziona il minuendo al complemento a dieci del sottraendo.
4) Si trascura la cifra più significativa della somma ottenuta; il numero rimanente è la
differenza cercata.
Vediamo un altro esempio:
7893 - 231 = 7893 - 0231 = 7893 - (10000-0231) = 7893 + 9769 = 17662
il numero 1 all’inizio dell’ultimo risultato lo trascuro, 7662 è il valore della differenza.
In generale se Cn-1 Cn-2 ............. C1 C0 è la rappresentazione in base B di un numero
intero N di n cifre chiamiamo complemento alla base di N il numero Bn -N che può
essere calcolato facendo il complemento a B-1 delle singole cifre che lo compongono e
addizionando poi 1. Bisogna calcolare il complemento del sottraendo solo dopo aver
pareggiato le sue cifre con quelle del minuendo (il numero delle cifre deve coincidere).
Questo metodo può essere applicato anche nel caso della sottrazione tra due numeri
binari, ma in questo caso si utilizzerà il complemento a due. Nel caso dei numeri binari
possiamo utilizzare due tipi di algoritmi per determinare tale complemento a due.
1° algoritmo : innanzitutto occorre determinare il complemento a 1 di una cifra binaria che
è dato dalla cifra inversa ad ogni bit del numero (trasformando gli 0 in 1 e viceversa) e poi
si aggiunge 1. Vediamo un esempio:
1011011
0100100 +  complemento ad uno
16
1 =  aggiungo 1
0100101
Sommando il complemento a 1 del numero dato addizionato ad 1con il numero stesso
otteniamo:
1011011+
0100101=
10000000  questo è il complemento a 2 di livello superiore
2°algoritmo : Si copiano i bit del numero da quello meno significativo finché si incontra 1,
dopo aver copiato questo primo 1 si invertono i successivi bit. Vediamo un esempio:
100110  li copio (dal bit meno significativo fino al 1°)1
devo invertirli  011010
La sottrazione tra due numeri binari con il metodo del complemento a due deve essere
effettuato seguendo i seguenti passi:
1) Si pareggiano le cifre di minuendo e sottraendo inserendo degli zeri a sinistra della cifra
più significativa.
2) Si calcola il complemento a due del sottraendo.
3) Si addiziona il minuendo al complemento a due del sottraendo.
4) Si trascura il bit più significativo del risultato ottenendo in tal modo la differenza voluta.
Vediamo un altro esempio:
101101111101=
1011011
0011101=
1011011+

1100011=
10111110
Il primo “1” del risultato deve essere trascurato, “0111110” è la differenza.
TABELLA DI CORRISPONDENZA TRA SISTEMI DI NUMERAZIONE
DECIMALE
BINARIO
OTTALE
ESADECIMALE
0
0000
00
0
1
0001
01
1
17
2
0010
02
2
3
0011
03
3
4
0100
04
4
5
0101
05
5
6
0110
06
6
7
0111
07
7
8
1000
10
8
9
1001
11
9
10
1010
12
A
11
1011
13
B
12
1100
14
C
13
1101
15
D
14
1110
16
E
15
1111
17
F
18
CODIFICAZIONE DELLE INFORMAZIONI
Per poter elaborare automaticamente le informazioni è necessario procedere alla
codificazione delle stesse, occorre cioè tradurre le parole realizzate come sequenza di
simboli dell’alfabeto esterno in parole costituite da simboli dell’alfabeto interno.
UTENTE
Parole dell’alfabeto
esterno
Parole dell’alfabeto
interno
CODIFICATORE
Alfabeto
interno
Alfabeto
esterno
CODIFICATORE
Per alfabeto esterno ci si riferisce:
1) 26 lettere maiuscole dell’alfabeto inglese (A, B,.........X , Y, Z)
2) 10 cifre decimali
3) 28 caratteri speciali (segni di interpunzione, simboli matematici, lo spazio detto anche
blank o space). Lo spazio non corrisponde ad un carattere di stampa effettivo ma viene
utilizzato come elemento separatore tra parole e/o numeri.
L’elaboratore è quindi in grado di interagire con l’ambiente esterno ma le informazioni
devono essere tradotte nell’alfabeto interno che è quello binario. L’operazione di
traduzione nota come codificazione mette in corrispondenza biunivoca le parole
corrispondenti costruite sui due alfabeti e permette il passaggio tra l’interno e l’esterno
dell’elaboratore. In generale dati due alfabeti A e B l’esistenza dal seguente teorema:
A = a1 a2 ......... an 
B = b1 b2 ..........bm 
con n ed m maggiori di 1, è possibile codificare l’insieme delle possibili parole realizzate
su A (che indichiamo con A*) mediante parole dell’insieme B*. La dimostrazione si basa
sul fatto che è possibile interpretare gli elementi di A come simboli di un sistema di
numerazione posizionale di base n per cui ogni parola appartenente ad A* può essere
19
considerata come la rappresentazione di un numero intero N in tale sistema; il numero N
può essere rappresentato mediante il sistema posizionale in base m con simboli
appartenenti a B e quindi mediante parole di B*.
Nel caso degli elaboratori l’alfabeto interno è quello binario. Ogni elaboratore ha un
proprio sistema di codifica detto codice macchina; il problema della codifica è comunque
un problema interno all’elaboratore; la rappresentazione binaria all’interno della macchina
non incide sui principi di funzionamento della stessa.
CODIFICAZIONE DEI NUMERI
I numeri possono essere codificati in binario; questa codificazione richiede diversi sistemi
di codifica. Una di queste tecniche fa uso della conversione in binario non dell’interno
numero ma di cifra per cifra servendosi di un codice opportuno. Vediamo alcuni sistemi di
codificazione numerica:
1) BCD (Binary Coded Decimal) in cui la rappresentazione di ogni cifra decimale si ottiene
con 4 bit dell’alfabeto binario. Vediamo degli esempi:
1710 = 0001
0111
1
8110 = 1000
8
7
0001
1
20
La tabella di corrispondenza delle dieci cifre decimali è la seguente:
cifra decimale
codice BCD
0
0000
1
0001
2
0010
3
0011
4
0100
5
0101
6
0110
7
0111
8
1000
9
1001
Poiché con 4 bit siamo in grado di rappresentare solo 2 4= 16 simboli il codice BCD non è
ottimale. Si dice che un codice è ottimale quando la quantità dei caratteri da codificare
coincide con l'utilizzo dei bit.
Osservazione. L’insieme dei bit utilizzati per rappresentare un carattere è detto byte. Il
byte è la minima unità di rappresentazione dell’informazione ed il numero di bit che lo
costituisce può variare a seconda del codice; generalmente il byte è costituito da otto bit
perché sono stati sviluppati codici per caratteri alfanumerici con cui è possibile
rappresentare 28 = 256 caratteri. Un insieme di byte costituisce una parola o word; la
lunghezza della parola cioè il numero di bit che lo compongono varia a seconda del tipo di
elaboratore.
Abbiamo parlato di caratteri alfanumerici, vediamo di che si tratta. L’insieme dei caratteri
alfanumerici è costituito da 26 = 64 caratteri che possono essere codificati pertanto su sei
bit. Nei calcolatori moderni l’insieme dei bit usato per formare un carattere è di 8 bit per
cui è possibile codificare 28 =256 caratteri potendo in tal modo aggiungere ai 64 già
menzionati le lettere minuscole ed altri segni particolari. I sistemi di codificazione più
comunemente usati per rappresentare all’interno degli elaboratori i caratteri alfanumerici
con 8 bit sono l’EBCDIC (Extended Binary Code Decimal Interchange Code) che è la
21
codifica degli elaboratori IBM e l’ASCII (American Standard Code for Information
Interchange) usati negli elaboratori della DEC.
1) EBCDIC. In base alla codifica EBCDIC ogni carattere occupa un byte, 8 bit, quindi il
codice permette di codificare 256 caratteri (28)
0
1
2
3
4
5
6
7
Questo è un byte. La metà di un byte è detta semibyte; il semibyte di sinistra (da 0 a 3) è
detto zonatura (zone) mentre quello di destra comprende i bit da 4 a 7 è detto digit.
Zonatura
Digit
Semibyte (03); Semibyte (47)
2) ASCII. Nel codice ASCII i semibyte hanno il nume invertito, il primo si chiama digit (da
0 a 3) il secondo è la zonatura quindi la sequenza dei bit per memorizzare i dati è
invertita
7
6
5
zonatura
4
3
|
2
1
0
digit
22
Osservando la tabella possiamo osservare una serie di CODICI:
SPACE: spazio
SYN: sincronizzazione
SOH:
STX:
caratteri speciali non stampabili che servono per la trasmissione
ETX:
dei dati
EOT:
ALK:
NAK:
ETB:
CAN:
ESC:
Nella zona 7 possiamo vedere che metà dei codici sono 0 e l’altra metà sono 1. Il numero
meno significativo è lo 0.
PARAWIN: è un esempio di pacchetto di programmi per riempire le seconda parte della
tabelle ASCII che normalmente è vuota, per esempio con caratteri celtici.
Il codice KOI-8 è basato sui codici ASCII relativamente alla prima parte della tabella dei
codici, mentre la seconda parte viene riempita con dei codici non standard che possono
essere di lingue diverse permettendo di trasmettere i messaggi in modo completo.
Cambia così il layout della tastiera per ricomprendere dei codici che non sono compresi
nel codice ASCII.
Basandosi sui medesimi principi di codificazione sono stati sviluppati vari codici alcuni dei
quali servono per esprimere i colori. Per esempio nel caso di 216 colori si ha che :
 il NERO viene rappresentato con 000000
 il BIANCO con FFFFFF
 il GOSTWHITE con F8F8FF
Sezionando il codice si comprende che questo è formato di tre parti che rappresentano
l’intensità dei tre punti fondamentali dello schermo, rosso, blu e verde.
I codici EBCDIC e ASCII si riferiscono a informazioni di tipo alfabetico e non numerico nel
senso che la serie di cifre non è considerata come un numero sul quale agire con
23
operazioni aritmetiche ma come una generica informazione espressa come un numero.
Per esempio: codice di avviamento postale o un numero telefonico.
I codici servono solo per trasferire le informazioni.
RAPPRESENTAZIONE DI INFORMAZIONI NUMERICHE
Ogni numero può essere codificato in binario ma in questo modo la struttura decimale del
numero è completamente alterata. Quando si vogliono ottenere i vantaggi tecnici offerti
dal sistema in base due senza perdere la struttura decimale del numero, ossia
osservando l’individualità delle singole cifre, oppure nei casi di trasmissione si può usare
per la codifica il codice BCD visto precedentemente.
Nel caso in cui le informazioni numeriche debbano essere elaborate si possono operare
differenti rappresentazioni che nel caso del sistema IBM 370, per esempio, sono:
1) decimale zoned
2) decimale packed
3) binario fixed point (virgola fissa)
4) binario floatting point (virgola mobile).
Ogni elaboratore utilizza un proprio sistema di rappresentare i numeri di base che
dipende:
 dal tipo di architettura del processore, cioè la lunghezza del bus dei dati
 il sistema operativo utilizzato.
Ci sono delle applicazioni di CAD che operano direttamente con l’hardware, scavalcano il
sistema operativo. Di solito invece la situazione è la seguente:
SA (software applicativo)
SO (sistema operativo)
HARDWARE
24
Il software applicativo non interagisce direttamente con l’hardware ma attraverso il
sistema operativo. Anche il software applicativo influenza la rappresentazione dei numeri.
Analizzeremo tre tipi di rappresentazione dei numeri:
1) rappresentazione dei numeri interi (integer)
2) rappresentazione dei numeri in virgola fissa (fixed point)
3) rappresentazione dei numeri in virgola mobile (floating point numbers)
In alcuni sistemi la rappresentazione dei numeri interi e a virgola fissa si considera uguale.
1) Rappresentazione dei numeri interi. Un calcolatore trasforma i numeri interi immessi
in numeri del sistema di numerazione usato internamente e successivamente in simboli
binari. Per motivi tecnici i calcolatori utilizzano di solito un numero fisso di bit per la
rappresentazione dei numeri interi, che si chiama lunghezza di parola fissa. Se un
numero non occupa cvompletamente la lunghezza di parola prevista, la sequenza dei
numeri binari viene riempita verso sinistra con gli zeri.
Per esempio consideriamo di avere una lunghezza fissa di parola di 16 bit:
199310 = 111110010012 viene trasformata in: 0000 0111 1100 1001 2 dove i primi 4
zeri sono di riempimento e servono per rappresentare il numero con 16 bit, che è la
lunghezza fissa.
Il segno di un numero viene codificato dal primo bit del numero stesso, purtroppo può
avvenire in vari modi. La diversità comincia già dall’assegnazione del primo bit. Per
esempio nel caso dell’IBM se il primo bit è 0 il segno è negativo, se invece il primo bit è
1 allora il segno è positivo.
2) Rappresentazione dei numeri in virgola fissa. La virgola è in sostanza un
separatore. I numeri vengono messi in colonna tenendo conto della virgola. Ogni
numero a virgola fissa n occupa un campo di lunghezza fissa che può essere una
mezza voce (half word) oppure una voce. Il primo bit è riservato al segno S con la
convenzione vista prima (0=segno negativo 1=segno positivo). Vediamo uno schema
della rappresentazione fixed point usato dalle case costruttrici IBM e DEC:
25
S
0
i
half word IBM 370
1......................................15  n° bit
S
i
half word PDP 11
15 14.......................................0
S
i
full word
IBM 370
0
1.................................................................….......…...31
Nella parte i costituita da n-1 bit viene rappresentato in binario il valore assoluto del
numero; nella maggior parte degli elaboratori i numeri negativi sono rappresentati in
complemento a due del corrispondente numero positivo. I massimi e i minimi numeri
rappresentabili sono:
per n-1 = 15 max = 215 -1 = 32767 min = -215 = -32767
per n-1 = 31 max = 231-1 = 2147483647 min = -231 = -2147483647
I risultati di operazioni aritmetiche su numeri fixed point sono ancora numeri fixed point. Si
può presentare il caso in cui il risultato preveda un numero di bit maggiore di quello
disponibile il che è dovuto alla lunghezza fissa della parola. Questa situazione si chiama
OVERFLOW (traboccamento). Quindi diciamo che si ha l’OVERFLOW (traboccamento):
quando il risultato ottenuto attraverso operazioni aritmetiche con numeri fixed point
richiedono un numero di bit maggiore di quello previsto dalla lunghezza della parola che è
fissa. Vediamo un esempio:
lunghezza della parola
9|8
+
0|6
1
Overflow
risultato che non entra nella
lunghezza della parola
0|4
26
3) Rappresentazione in virgola mobile. Si tratta di numeri reali per i quali al fine di non
dover controllare la posizione del punto decimale e di non doversi preoccupare del
numero delle cifre del risultato ottenuto attraverso operazioni aritmetiche, si usa una
rappresentazione i virgola mobile (floating point) che è la rappresentazione
normalizzata di uso più frequente negli elaboratori.
Rappresentazione normalizzata. I numeri reali sono costituiti da due parti:
1) la MANTISSA: che sono le cifre significative del numero
2) la CARATTERISTICHE: che è l’esponente di una base prestabilita che fornisce l’ordine
di grandezza.
Vediamo un esempio: il numero 732,8 può essere rappresentato nei seguenti numeri
modi:
MANTISSA
CARATTERISTICA
732,8
100
73.28
101
7328
10-1
7,328
102
0,7328
103
In generale un dato numerico qualsiasi ammette una rappresentazione del tipo
<caratteristica>
<mantissa> * <base del sistema di numerazione>
dove:
<mantissa> = x1 x2 .........xh*y1y2..............yk;
<caratteristica> = a1a2 ............... ap
essendo xi yi ai cifre del sistema di numerazione considerato.
Se un numero è rappresentato come:
<caratteristica>
*<mantissa>*<base del sistema di numerazione>
si dice che è rappresentato secondo la notazione esponenziale normalizzata; la
mantissa rappresenta pertanto un numero inferiore ad 1.
27
La rappresentazione floating point viene fatta con campi di lunghezza fissa di una voce o
doppia voce e si può schematizzare come nella figura seguente:
S
CARATTERISTICA
MANTISSA
0
1 2 .........................7 8..........................31
Vediamo quali sono le trasformazioni a cui è sottoposto un numero per la
rappresentazione in binario floating point (le trasformazioni sono svolte dall’elaboratore).
esponente
Z = m *Bn
Base del sistema di calcolo
Numero in
virgola
mobile
MANTISSA
Spesso l’esponente di un numero in virgola mobile si chiama anche la caratteristica.
La mantissa e l’esponente possono avere lo stesso segno (+;-)
Il numero normalizzato in virgola mobile inizia di solito con lo 0 nella parte intera.
Esempio: 123,5*108 = in forma normalizzata  0,1235
S
MANTISSA
8 bit
ESPONENTE
8 bit
SEGNO
In generale si dice che sono numeri in virgola mobile quelli per cui spostando la virgola
occorre modificare l’esponente per mantenere inalterato il suo valore.
Per esempio:
1,23*10-3 = 0,123*10-2 = 12,3*10-4
Range è l’intervallo dei numeri che possiamo rappresentare in virgola fissa o in virgola
mobile con una parola.
28
La precisione della rappresentazione dei numeri reali: la lunghezza della mantissa nei
numeri in virgola mobile e il numero di cifre in virgola fissa determinano la precisione del
numero reale rappresentato. Per ottenere una precisione maggiore i calcolatori lavorano
con una lunghezza di mantissa maggiore. Per rappresentare i numeri il numero delle cifre
significative viene spesso aumentato notevolmente utilizzando una precisione doppia cioè
due parole una di seguito all’altra (doppia parola significa doppia precisione). La
precisione riguarda la lunghezza della mantissa.
Rappresentazione dei numeri negativi. Per la rappresentazione dei numeri negativi le
tecniche generalmente usate sono:
1) modulo e segno
sottrazione zeri 
2) complemento a 2
addizione uno zero solo
3) complemento a 1
addizione zeri 
1) Modulo e segno. Per rappresentare un numero con questa tecnica occorre
considerare il segno (0 per positivo, 1 per negativo) il suo valore assoluto o modulo.
Nella rappresentazione di numeri fixed point il segno occupa il bit più a sinistra del campo
ed il modulo i restanti bit. Il range dei numeri che possono essere rappresentati è allora
-2n-1 -1,..........,o,.......... 2n-1 -1
cioè per n-1 =15 da -32767 a +32767
e per n-1 = 31 da -2147483647 a +2147483647
In questa rappresentazione esistono due zeri uno positivo e uno negativo. Questa
rappresentazione presuppone nell’elaboratore ci siano dispositivi che trattano il bit del
segno in modo diverso da quelli che rappresentano il modulo; l’analisi del segno dei due
operandi definisce se occorre eseguire l’addizione oppure le sottrazione e quindi se il
dispositivo addizionatore-sottrattore deve essere usato in un modo o nell’altro. Poiché dati
due numeri relativi a e b vale la relazione a-b = a+(-b) e a+b = a-(-b) possiamo fare a
meno del sottrattore o dell’addizionatore considerando il complemento a due del
sottraendo.
2) Complemento a due. Questa tecnica elimina la presenza di uno zero positivo e di uno
negativo e permette l’esecuzione delle operazioni aritmetiche in modo molto semplice.
29
Per ottenere il complemento a due di un numero negativo codificato su n bit si procede
nel seguente modo:
1) si rappresenta il corrispondente numero positivo espandendo verso destra il segno;
2) si determina il complemento a due
Vediamo un esempio:
 rappresentare in complemento a due il numero -72
+72 = 0 000 0000 0100 10002
espansione verso destra
1 111 1111 1011 1000  complemento a due di -72
segno
0100 10002 = 72 gli zeri in più sono necessari per riempire i 16 bit.
L’addizione di numeri in complemento a due non tiene conto del segno degli operandi ed
è realizzata addizzionandoli e non tenendo conto dell’eventuale riporto.
Vediamo un esempio:
-33+
11011111+
+21=
00010101=
-12
11110100  -12 in complemento a due
Vediamo un altro esempio:
-33+
11011111+
-21=
11101011=
-54
111001010  -54 in complemento a due
30
La sottrazione di numeri in complemento a due è realizzata invertendo il segno del
sottraendo e addizionando il minuendo. L’inversione del segno può essere realizzata
prendendo il complemento a due del sottraendo; dato quindi a-b consideriamo -b e lo
addizioniamo ad a : a+ (-b). Vediamo un esempio:
+33 - (-21) = (00100001) - (11101011) =
= (00100001) + (00010101) =
= 00110110  54
Vediamo un altro esempio:
+33 - (+21) = (00100001) - (00010101) =
= (00100001) + (11101011)=
= 00001100  12
Osseviamo che i numeri negativi si ottengono complementando a due i corrispondenti
positivi che a loro volta si otterranno complementando a due i numeri negativi
corrispondenti.
3) Complemento a uno.Il metodo del complemento a uno fu realizzato al fine di
addizionare due numeri con segno diverso allo stesso modo di due numeri con lo
stesso segno. Per realizzare il complemento a 1 di un numero negativo basta
considerare il corrispondente numero positivo e invertire i bit. Vediamo un esempio:
determiniamo il complemento a uno di -33:
+3310 = 001000012  110111102
inversione
Notiamo che il complemento a uno del complemento a uno di un numero è il numero
stesso; come per il complemento a due si inverte il segno senza tenere conto del segno
originale del numero. In questa rappresentazione esiste uno zero negativo e uno positivo.
L’addizione di numeri in complemento ad uno può essere eseguita non considerando i
segni degli operandi; le procedure sono le seguenti:
1) si addizionano i due numeri nella rappresentazione in complemento a 1;
31
2) se si verifica un riporto questo è addizionato al bit meno significativo della somma.
Vediamo un esempio:
+33+
00100001+
-21=
11101010=
+12
100001011+
1=  addizione del riporto
riporto
00001100  +12
Vediamo un altro esempio:
-33+
11011110+
-21=
11101010=
-54
111001000+
1=  addizione del riporto
riporto
11001001  -54 in complemento a uno
32
Scarica