SISTEMI DI NUMERAZIONE

SISTEMI DI NUMERAZIONE
SISTEMI DI NUMERAZIONE
La necessità di numerare gli oggetti e, più in generale, di esprimere concetti numerici nasce agli
albori della civiltà umana. Fin dai tempi più antichi ogni civiltà ha sempre cercato di associare dei
simboli ai concetti numerici per rendere possibile la trascrizione e la comunicazione; la scelta del tipo
di simbolo da utilizzare per tale rappresentazione ed il significato assunto da determinata sequenza di
simboli costituisce quello che viene chiamato SISTEMA DI NUMERAZIONE.
Noi, appartenenti all’era moderna, siamo ormai abituati da molti secoli ad utilizzare il cosiddetto
sistema numerico decimale, basato sull’utilizzo dei seguenti simboli:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Utilizzando questo sistema di numerazione siamo abituati ad esprimere concetti servendoci
esclusivamente di opportune combinazioni dei simboli indicati sopra. Ad esempio se avessimo un
contenitore con dentro delle scatole e sapendo che abbiamo messo dentro tale contenitore 12 scatole,
con il sistema di numerazione decimale potremmo dire che il contenitore contiene 12 pacchetti.
Supponiamo adesso che arrivi improvvisamente un extraterrestre dicendoci che dentro il contenitore
non ci sono 12 scatolette ma α β scatolette, perché nel suo pianeta adottano un sistema decimale
quasi esattamente identico al nostro, solo che loro fanno uso dei seguenti simboli:
Ο, α, β, γ, δ, ε, λ, µ, ν, τ
Il fatto che l’extraterrestre faccia uso di simboli diversi cambia la nostra percezione del concetto
numerico ? Forse l’extraterrestre vede una quantità diversa di scatole? No! La situazione resta
inalterata soltanto noi adottiamo una nostra simbologia per esprimere un concetto numerico e
l’extraterrestre ne adotta un’altra, ma il concetto espresso è del tutto equivalente. Questo esempio
banale ci fa capire quanto sia soggettivo l’uso di un sistema o di un altro per esprimere dei caratteri
numerici. Non è nemmeno necessario usare dieci simboli come facciamo noi, infatti nel corso della
storia umana sono stati usati ( e si usano ancora ) dei sistemi basati non su 10, ma su un numero
diverso di simboli, come per esempio il sistema usato dai Sumeri e poi dai Babilonesi basato sul
numero 60, tuttora in uso per la misurazione degli angoli e per la misura del tempo. Una volta
compresa l’arbitrarietà del sistema di numerazione rispetto al concetto numerico, diventa più facile
svincolarsi dai legami con il sistema decimale che ci portiamo dietro come retaggio atavico ed
analizzare il sistema decimale sotto un punto di vista diverso.
La notazione posizionale
Il sistema decimale che conosciamo ed adottiamo normalmente è costituito da una notazione in cui i
simboli numerici ( ovvero le cifre 0, 1, 2, …9 ) prendono un valore numerico in relazione alla
posizione che occupano all’interno della stringa numerica, con la convenzione che le cifre più a destra
hanno un peso minore, mentre le cifre più a sinistra hanno un peso superiore. Bisogna accordarsi su
cosa si intende per “peso”; a questo proposito consideriamo il numero 2457, gli alunni della scuola
elementare imparano a trattarlo nella maniera seguente:
−
−
−
−
2 migliaia
4 centinaia
5 decine
7 unità
Adesso osserviamo che il numero, sulla base del ragionamento appena svolto, può essere visto in
questa forma :
2457 = 2 • 1000 + 4 • 100 + 5 • 10 + 7 • 1
osserviamo che 100, 100, 10, 1, possono essere espressi come potenza di 10 nella forma:
2457 = 2 • 103 + 4 • 102 + 5 • 101 + 7 • 100
SISTEMI DI NUMERAZIONE
Possiamo allora dire che alla posizione più a destra corrisponde la “potenza più piccola” di 10, mentre
alla posizione più a sinistra corrisponde la “potenza più grande” di 10. Le varie potenze di 10 ci
permettono quindi di stabilire una “gerarchia” tra le varie cifre della stringa, rendendoci possibile
introdurre il concetto di cifra più significativa (la cifra corrispondente alla potenza più alta ) ed il
concetto di cifra meno significativa ( la cifra corrispondente alla potenza più bassa ). Dall’esempio
fatto si possono trarre alcune conclusioni interessanti:
- in generale non è detto che sia necessario usare 10 simboli per esprimere concetti numerici, si può
ricorrere anche ad un numero diverso di simboli utilizzando una notazione posizionale
- un sistema di numerazione è identificato dal numero di cifre che sono usate per esprimere i
concetti numerici
- l’importanza delle cifre stesse in una stringa numerica è indicata mediante l’uso di potenze
crescenti di tale numero di cifre
Possiamo a questo punto esprimere alcune considerazioni di carattere generale:
•
•
•
Il numero di cifre usate in un sistema di numerazione prende il nome di BASE
Le potenze crescenti della base ( nel nostro esempio 100; 101; 102…etc.) definiscono il PESO di
ciascuna singola cifra
Mediante una notazione di tipo posizionale è possibile ottenere, con diverse basi numeriche,
rappresentazioni equivalenti dello stesso numero ( “inteso come concetto numerico”).
In generale quindi un sistema di numerazione costituito da un numero di simboli pari a b, verrà
definito sistema in base b, ed utilizzerà le cifre:
0, 1, 2, ………., (b-1)
Un numero N nella base b sarà esprimibile mediante una sequenza di cifre C k, le quali possono
assumere proprio i valori 0, 1,2,…….,(b-1) nella forma seguente:
Nb = ( Cn-1 Cn-2 ………..C1 C0 ) b
Dove il pedice b sta ad indicare qual è la base del sistema di numerazione che stiamo usando. In
questa rappresentazione C0, C1,……, C n-1 sono le cifre ( o per meglio dire la stringa di cifre )che
costituiscono il numero nella base b, aventi peso rispettivamente b0, b1,………, b n-1; è possibile,
seguendo quest’ottica, effettuare subito la conversione tra la generica base b ed il sistema decimale,
nel modo seguente:
N10= C n-1 • b n-1 + C n-2 • b n-2 + ………. + C1 • b1 + C0 • b0
Ad esempio scegliendo b=7 avremo un sistema di numerazione a base 7 ovvero un sistema che fa uso
di soli 7 simboli che potrebbero benissimo essere le cifre 0, 1, 2, 3, 4, 5, 6; il numero (3526 )7 è un
numero espresso in base 7 ed il fatto che sia in base 7 è espresso dal pedice 7 che si vede oltre la
parentesi che racchiude il numero. La conversione del numero (3526 )7 in base 10 ovvero nel sistema
decimale farà uso proprio della notazione posizionale e sarà data nella forma seguente:
( 3526 )7 = 3 • 73+ 5 • 72 + 2 • 71 + 6 • 70 = 3 • 343 + 5 • 49 + 2 • 7 + 6 • 1= ( 1294 )10
SISTEMI DI NUMERAZIONE IN BASE DIVERSA DA DIECI
Sistema ottale
Abbiamo visto nel paragrafo precedente che non è necessario che si utilizzino dieci simboli; possiamo
allora pensare di utilizzarne otto e precisamente le cifre da 0 a 7; il sistema ottale fare pertanto uso dei
seguenti simboli:
0, 1, 2, 3, 4, 5, 6, 7
SISTEMI DI NUMERAZIONE
Si chiamerà quindi sistema in base 8 ed i pesi delle singole cifre in una stringa numerica ottale saranno
perciò dati da potenze di 8. La conversione di un numero ottale in decimale può avvenire secondo la
definizione data nel paragrafo precedente e cioè:
Nb = C n-1 • b n-1 + C n-2 • b n-2 + … + C2 • b2 + C1 b1 + C0 b0
Quindi dovendo convertire in decimale il numero ottale:
( 375 )8 = 3 • 82 + 7 • 81 + 5 • 80 = 3 • 64 + 7 • 8 + 5 • 1 = ( 253 )10
Più complicato è il discorso per quanto riguarda la conversione inversa, cioè il passaggio da decimale
in ottale. Il concetto basilare che bisogna acquisire è che ciò che in decimale viene espresso mediante
l’uso di dieci simboli deve essere “ distribuito “ in 8 cifre; “ distribuito “ ! Ma distribuito vuol dire
diviso quindi l’idea di fondo è che si debba ricorrere per questo tipo di conversione ad una serie di
operazioni di divisione. Vediamo ora come si può procedere alla conversione del numero decimale
( 253 ) 10 nel corrispondente numero ottale.
-
Il primo passo è dividere 253 per 8; tale divisione dà come risultato 31 con resto di 5
Teniamo da parte il 5 e dividiamo nuovamente 31 per 8, vediamo che il risultato è 3 con resto di 7
Teniamo da parte il 7 e dividiamo 3 per 8; ovviamente otteniamo come risultato 0 con resto di 3
Avendo ottenuto quoziente nullo il procedimento si arresta
A questo punto possiamo dire che il primo resto che abbiamo trovato è la cifra ottale meno
significativa ( quella di peso 80 per il nostro numero), mentre l’ultimo resto che abbiamo trovato è la
cifra più significativa ( quella di peso 82 per il nostro numero); possiamo vedere meglio il risultato
ottenuto costruendo la tabella seguente:
OPERAZIONE
253/8
31/8
3/8
QUOZIENTE
31
3
0
RESTO
5
7
3
Ragionando come indicato prima la cifra più significativa del numero ottale è il 3, poi viene il 7 ed
infine il 5, che è la cifra meno significativa; pertanto risulta:
( 253 )10 = ( 375 )8
Sistema esadecimale
Il sistema di numerazione Esadecimale utilizza, come indica il nome stesso sedici simboli e
precisamente:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
dove le lettere A, B, C, D, E, F sono equivalenti ai numeri decimali da 10 a 15, secondo lo schema: A
corrisponde a 10, B corrisponde ad 11, C corrisponde a 12, D corrisponde a 13, E corrisponde a 14, F
corrisponde a 15.
Per il sistema esadecimale vale la notazione posizionale esattamente come è stato utilizzato in
precedenza, ovvero si avrà un sistema con base 16 e i pesi di ogni singola cifra saranno indicati con
potenza crescente della base 16, da 160 per la cifra meno significativa fino a 16 k per la k-esima cifra.
La conversione dal sistema esadecimale al sistema decimale avviene esattamente come indicato per i
numeri attuali ovvero, dato ad esempio il numero esadecimale ( F 14 )16 la conversione si ottiene
mediante il procedimento seguente:
( F14 )16 = F • 162 + 1 • 161 + 4 • 160 = 15 • 162 + 1 • 161 + 4 • 160 =
= 15 • 162 + 1 • 161 + 4 • 160 = 15 • 256 + 1 • 16 + 4 • 1 = ( 3860 )10
SISTEMI DI NUMERAZIONE
Per quanto riguarda la conversione inversa ovvero da decimale in esadecimale è necessario
nuovamente “ distribuire “ su 16 cifre ciò che nel sistema decimale viene espresso mediante dieci
simboli; il procedimento è analogo a quanto visto per il sistema attuale, ovvero si utilizza il metodo
delle divisioni successive per 16 del numero che vogliamo convertire. Ad esempio si voglia convertire
in esadecimale il numero 3860.
-
Il primo passo consiste nel dividere 3860 per 16; tale divisione dà come risultato 241 con resto di 4.
Teniamo da parte il 4 e dividiamo 241 nuovamente per 16; otteniamo 15 con resto di 1.
Teniamo da parte l’uno e dividiamo 15 per 16; otteniamo 0 con resto di 15.
Avendo ottenuto quoziente nullo il procedimento si arresta.
A questo punto si procede esattamente come per i numeri attuali cioè il primo resto che abbiamo
trovato è la cifra meno significativa ( quella di peso 160 ), mentre l’ultimo resto che abbiamo trovato è
la cifra più significativa ( quella di resto 162 ); possiamo vedere meglio il risultato ottenuto costruendo
una tabella :
OPERAZIONE QUOZIENTE RESTO
3860/16
241
4
241/16
15
1
15/16
0
15F
Ovviamente dato che la cifra più significativa sarebbe 15 e visto che il sistema esadecimale si indica
con F, otterremo F come cifra più significativa e pertanto
( 3860 )10 = ( F 14 )16
SISTEMA BINARIO
Il minor numero possibile di simboli utilizzabili per rendere possibile una notazione posizionale è 2,
pertanto b = 2 è la base più piccola e comporta l’uso di due soli simboli, 0 ed 1. Da questo
ragionamento si deduce che non possono esserci sistemi di numerazione posizionale in base 1 oppure
in base 0, perché nel primo caso esisterebbe una sola cifra, lo 0, mentre nel secondo caso non avremo
alcuna cifra. Detto questo è da osservare che un sistema basato su due sole cifre permette di sfruttare
al meglio la logica e le conclusioni dell’algebra booleana e quindi ben si presta ad essere utilizzato in
ambito elettronico ed informatico.
Un numero binario è rappresentato da una stringa di simboli contenente soltanto i numeri 0 ed 1; ad
esempio ( 1001101)2 è un numero binario. Le singole cifre binarie ( ovvero 1 e 0 ) sono chiamate BIT
dalla contrazione delle parole inglesi binary digit il cui significato è proprio quello di “cifra binaria”;
per questo d’ora in avanti verrà usato indifferentemente il nome BIT oppure la denominazione cifra
binaria. La conversione da binario in decimale avviene usando le solite regole della notazione
posizionale, tenendo conto che in questo caso la base è 2 e quindi i pesi saranno espressi mediante
potenze crescenti di 2.
Ad esempio il numero binario ( 1001101)2 viene convertito in decimale con il seguente procedimento:
( 1001101)2 = 1 • 20 + 0 • 21 + 1 • 22 + 1 • 23 + 0 • 24 + 0 • 25 + 1 • 26 =
= 1 + 0 •2 + 1 • 4 + 1 • 8 + 0 • 16 + 0 • 32 + 1 • 64 = ( 77 )10
Analogamente per quanto riguarda la conversione da decimale in binario si procede come per gli altri
sistemi numerici che adottano la notazione posizionale e cioè è necessario “distribuire” su due simboli
ciò che normalmente viene indicato con dieci simboli; il procedimento consiste perciò in una serie di
divisioni successive per due. Supponiamo ad esempio di voler convertire il numero decimale ( 77 )10
in binario, si procede nel modo seguente
:
- prendiamo 77, dividiamo per 2 ed otteniamo 38 con resto 1
- prendiamo 38, dividiamo per 2 ed otteniamo 19 con resto 0
- prendiamo 19, dividiamo per 2 ed otteniamo 9 con resto 1
- prendiamo 9, dividiamo per 2 ed otteniamo 4 con resto 1
- prendiamo 4, dividiamo per 2 ed otteniamo 2 con resto 0
SISTEMI DI NUMERAZIONE
-
prendiamo 2, dividiamo per 2 ed otteniamo 1 con resto 0
prendiamo 1, dividiamo per 2 ed otteniamo 0 con resto 1
avendo ottenuto quoziente nullo il procedimento si arresta
Il primo resto che abbiamo trovato rappresenta la cifra meno significativa ( quella di peso 20 ), mentre
l’ultimo resto che abbiamo trovato rappresenta la cifra più significativa ( quella di peso 26 per il nostro
esempio ); il numero decimale ( 77 )10 sarà allora convertito in binario nel modo seguente:
( 77 )10 = ( 100110 )2
L’introduzione del sistema binario ci permette di costruire, con il semplice uso delle conversioni di
base, alcune tabelle che permettono di comparare il sistema binario direttamente al sistema ottale ed al
sistema esadecimale.
1) Tabella riepilogativa decimale – ottale - binario
Decimale
0
1
2
3
4
5
6
7
Ottale
0
1
2
3
4
5
6
7
Binario
000
001
010
011
100
101
110
111
Nella tabella sono riportate le cifre
decimali, le corrispondenti cifre ottali e
le corrispondenti stringhe binarie.
Viene messo chiaramente in evidenza
quanto avevamo esposto all’inizio e cioè
che nel sistema di notazione posizionale
uno stesso concetto numerico può essere
espresso in modi diversi.
Per costruire la tabella precedente sono state effettuate le conversioni di ciascuna
cifra decimale da 0 a 7 prima in ottale ( ed in questo caso c’è perfetta
corrispondenza ) e poi in binario.
Per chiarire quanto espresso dopo vediamo che se ad esempio provo a convertire in
binario 7 ottengo:
7/2 = 3 con resto di 1→ tengo 1 e procedo con 3
3/2 = 1 con resto di 1→ tengo 1 e procedo con 1
1 /2 = 0 con resto di 1→ tengo 1 ed avendo ottenuto quoziente nullo il
procedimento si arresta. Pertanto 7 corrisponde a ( 111 )2.
SISTEMI DI NUMERAZIONE
2) Tabella riepilogativa decimale- esadecimale- binario
Decimale
Esadecimale
Binario
Come per la tabella precedente anche qui
0
0
0000
sono stati rappresentati i numeri decimali da
1
1
0001
0 a 16, le corrispondenti cifre esadecimali e
2
2
0010
le corrispondenti stringhe binarie.
3
3
0011
Il metodo usato per determinare le stringhe
4
4
0100
binarie è semplicemente quello della
5
5
0101
conversione in binario con il solito criterio;
6
6
0110
ad esempio volendo convertire 9 avremo:
7
7
0111
9/2 = 4 con resto 1
4/2 = 2 con resto 0
8
8
1000
2/2 = 1 con resto 0
9
9
1001
1/ 2= 0 con resto 1
10
A
1010
Avendo ottenuto quoziente nullo il
11
B
1011
procedimento si arresta ed il numero 9
12
C
1100
corrisponde a: ( 1001 )2
13
D
1101
14
E
1110
15
F
1111
Se si leggono le due tabelle nella colonna relativa al corrispondente binario si osserva che per
esprimere in binario le cifre ( ovvero i simboli ) che costituiscono il sistema ottale, sono necessarie al
massimo tre cifre binarie ( 3 bit ), mentre per esprimere in binario le cifre che costituiscono il sistema
esadecimale sono necessarie al massimo quattro cifre binarie. Appare allora possibile riscontrare una
perfetta corrispondenza tra il sistema ottale ed il sistema binario e tra il sistema esadecimale ed il
sistema binario. Nella tabella delle corrispondenze con il sistema ottale si vede che sono sempre stati
usati tre bit, anche quando ne bastava un numero inferiore, semplicemente ponendo degli zeri a
sinistra; il vantaggio dell’uso di una notazione posizionale è proprio questo, aggiungendo degli zeri a
sinistra come cifra più significativa si può modificare la stringa senza per questo alterare il concetto
numerico espresso. Scrivendo 000 anziché 0 oppure 001 anziché 1 possiamo esprimere tutte le cifre
ottali come stringhe di tre bit, in questo modo si stabilisce una perfetta corrispondenza biunivoca tra
cifre ottali e stringhe di tre bit.
Lo stesso discorso vale per la tabella delle corrispondenze con il sistema esadecimale, solo che qui per
esprimere una singola cifra esadecimale facciamo ricorso ad una stringa di 4 bit , stabilendo così una
perfetta corrispondenza biunivoca tra cifra esadecimale e stringa di 4 bit. Sulla base di queste
conclusioni è possibile effettuare direttamente la conversione binario-ottale ed ottale- binario ed
analogamente binario- esadecimale ed esadecimale- binario. Vediamo con degli esempi come
avvengono nel dettaglio queste conversioni.
1) Conversione diretta binario- ottale
Consideriamo il numero binario ( 100110111 )2 per convertirlo direttamente in ottale si procede così:
- Si parte da destra della cifra meno significativa e si separano gruppi di 3 bit
100 / 110 / 111
Si osserva che ciascun gruppo corrisponde tramite la tabella precedente ad una cifra ottale e si
riportano tali corrispondenze, sempre procedendo da destra verso sinistra
111 = 7
111 = 6
100 = 4
La cifra ottale corrispondente al gruppo più a destra è la cifra meno significativa, mentre la cifra ottale
corrispondente al gruppo più a sinistra è la cifra più significativa, pertanto il numero cercato è:
SISTEMI DI NUMERAZIONE
( 467 )8
2 ) Conversione diretta ottale- binario
Consideriamo il numero ottale ( 407 )8 la conversione diretta in binario avviene nel modo seguente:
- si considerano le singole cifre ottali partendo da destra ed andando verso sinistra; si legge sulla
tabella a quale stringa di bit corrisponde ciascuna cifra e si riportano tali corrispondenze, sempre
procedendo da destra verso sinistra
7 = 111
0 = 000
4 = 100
-
la stringa corrispondente alla cifra più a destra è da mettere come meno significativa, quella
corrispondente alla cifra più a sinistra è da prendere come più significativa
100 / 000 / 111
-
Il numero binario richiesto allora sarà :
( 100000111 )2
Se per caso nello svolgere la conversione diretta binario- ottale ci accorgiamo che l’ultima stringa dio
bit contiene solo un bit oppure due, basterà aggiungere degli zeri a sinistra fino a che la stringa arriva
a comprendere 3 bit; ad esempio si voglia convertire direttamente in ottale il numero binario
(1001101)2 , suddividendo in gruppi da 3 bit si ottiene:
1 / 001 / 101
se aggiungo due zeri a sinistra non modifico il numero ( perché tanto lo zero dà un contributo nullo ),
ma mi posso ricondurre a stringhe tutte da tre bit
001 / 001 / 101
ed il numero ottale cercato è allora ( 115 )8 infatti dalla tabella si ricava:
101 = 5
001 = 1
001 = 1
2) Conversione diretta binario- esadecimale
Si procede esattamente come nel caso della conversione diretta binario- ottale, solo che qui i gruppi
saranno di 4 bit; ad esempio volendo convertire il numero ( 101100110110 )2 si procede così :
- si suddivide il numero binario in gruppi di 4 bit
1011 / 0 011 / 0110
-
si converte ciascun gruppo, usando la tabella ed andando da destra verso sinistra
0110=6
0011=3
1 0 1 1 = 11 B
-
il numero cercato, mantenendo sempre l’ordine da destra verso sinistra è ( B36 )16
Qualora l’ultimo gruppo avesse un numero di bit inferiore a 4 basterà aggiungere degli zeri a sinistra e
procedere poi esattamente come nel caso dei numeri ottali
SISTEMI DI NUMERAZIONE
3) Conversione diretta esadecimale- binario
Anche in questo caso basta procedere esattamente come nel caso della conversione diretta ottalebinario, solo che si utilizzerà la seconda tabella; ad esempio volendo convertire il numero ( A035 )16 si
procede, sempre da destra verso sinistra, nel modo seguente:
5=0101
3=0011
0=0000
A=1010
Pertanto il numero esadecimale assegnato corrisponde al binario: ( 1010000000110101 )2
OPERAZIONI CON I NUMERI BINARI
Il sistema di numerazione binario permette di svolgere le operazioni aritmetiche usuali, somma,
sottrazione, moltiplicazione, divisione, mantenendo le classiche regole della normale algebra. Adesso
vedremo nel dettaglio le modalità di svolgimento delle singole operazioni aritmetiche.
Addizione di numeri binari
Per quanto riguarda l’addizione tra numeri binari valgono le regole dell’addizione in colonna, secondo
il seguente schema:
1+0 = 1
0+1 = 1
0+0 = 0
1 + 1 = 0 con riporto di 1 alla colonna successiva
1 + 1 + 1 = 1 con riporto di 1 alla colonna successiva
Ad esempio si vogliono sommare tra loro i seguenti numeri binari ( 10101 )2 e ( 111 )2 , per facilitare
la comprensione del procedimento vediamo in parallelo lo svolgimento decimale e lo svolgimento
binario:
Riporti
1° Addendo
2° Accendo
Risultato
BINARIO
111
10 1 0 1 +
111=
___________
11100
DECIMALE
21+
7=
______
28
Come si può osservare dall’esempio basta eseguire le somme in colonna applicando in modo
automatico le 5 regole enunciate e si ottiene il risultato corretto; bisogna prestare molta attenzione ai
riporti, per questo motivo sarebbe utile segnalarli sempre perché è molto elevato il rischio di lasciarne
qualcuno per strada. E’ consigliabile inoltre svolgere le operazioni in colonna proprio come indicato
nell’esempio per evitare di “ impantanarsi “ in calcoli inutili. Potrebbe capitare sommando due numeri
che il risultato sia costituito da un numero di cifre binarie maggiore di quelle degli addendi originari,
questo è normale anche nel sistema decimale, infatti se sommiamo 9 e 8 otteniamo:
Riporti
1° Addendo
2° Addendo
Risultato
BINARIO
1
1001
1000
11001
DECIMALE
9 +
8
17
SISTEMI DI NUMERAZIONE
Sottrazione tra numeri binari
Anche per quanto riguarda la sottrazione tra numeri binari valgono le regole dell’aritmetica
elementare e le operazioni vengono svolte in colonna secondo le seguenti regole:
0–0
1–1
1–0
0–1
=
=
=
=
0
0
1
1 con un prestito di 1 dalla cifra successiva
Quest’ultima regola è la più difficile da comprendere ed è bene chiarirla con un esempio:
1001011 101 =
_______________
1000110
75 5 =
_____
70
Osserviamo nel dettaglio quello che accade quando si effettua una sottrazione con prestito, la cifra di
peso 2 k+1 presta una unità alla cifra di peso 2 k
2 k+1
1
2k
0 1 =
_______________
0
1
La sottrazione 0 - 1, dopo il prestito, è come se fosse diventata 2 - 1, perché 2 k+1 / 2 k = 2 e
quindi, grazie al prestito, è come se avessimo fatto l’operazione equivalente a 2 – 1. E’ comunque
ovvio che questo “ 2 “ è solo un’astrazione che ci permette di capire il concetto, perché nel sistema
binario esistono solo due simboli 0 e 1, però con quest’analisi si è perfettamente in grado di
comprendere la parte più ostica della sottrazione binaria. Potrebbe capitare, svolgendo un’operazione
di sottrazione binaria, che non sia possibile chiudere un prestito alla cifra immediatamente vicina
perché essa è 0, in questo caso si chiede un prestito al primo 1 che si trova verso sinistra, e tutti gli 0
che “ sorvoliamo “ vengono trasformati in 1. Un esempio chiarisce meglio il concetto:
1 1
1010001 110
______________
1001011
81 6
______
75
Moltiplicazione tra numeri binari
Non è usuale, ma si può comunque realizzare, il prodotto tra numeri binari; è possibile svolgere tale
operazione in colonna, usando le regole aritmetiche. Vediamo solo un esempio di prodotto tra numeri
binari:
10110 x
101 =
_______________
10110
00000–
10110
_________________
1101110
SISTEMI DI NUMERAZIONE
Basta quindi svolgere i prodotti termine a termine ed infine svolgere la somma in colonna; per la
somma in colonna si utilizzano le cinque regole già enunciate per la somma .
Divisione tra numeri binari
E’ un’operazione ancor meno usuale della moltiplicazione, comunque anche per la divisione si opera
come nel sistema decimale con le usuali regole aritmetiche. Supponiamo di voler effettuare la
divisione 14 : 2, vediamo lo svolgimento sia in binario sia in decimale:
1110
10
11
10
10
10
0
10
111
14
2
7
0
Rappresentazione dei numeri relativi
L’operazione di sottrazione tra due numeri è solitamente data da minuendo meno sottraendo, dal
punto di vista algebrico può essere considerato equivalente alla somma tra il minuendo ed il
sottraendo cambiato di segno. Pertanto la differenza può essere ricondotta ad una somma se facciamo
ricorso ai numeri negativi. Una rappresentazione particolarmente usata è quella detta in modulo e
segno, con la quale si usa il bit più significativo per individuare il segno, secondo la convenzione
seguente:
-
I numeri positivi hanno il bit più significativo pari a 0
I numeri negativi hanno il bit meno significativo pari ad 1
I rimanenti bit rappresentano il modulo, ovvero il valore assoluto, del numero stesso; questo tipo di
rappresentazione rende necessario aggiungere un bit oltre a quelli necessari per l’usuale
rappresentazione del numero. Ad esempio con un bit possiamo rappresentare tutti i numeri compresi
tra + 7 e - 7. Il difetto, che possiamo vedere dalla tabella seguente, è che esistono due
rappresentazioni dello 0 e precisamente 0 0 0 0 (cioè + 0 ) e 1 0 0 0 ( cioè - 0 ).
Bit relativo al segno
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
Bit relativi al modulo
111
110
101
100
011
010
001
000
000
001
010
011
100
101
110
111
Numero corrispondente
+7
+6
+5
+4
+3
+2
+1
+0
-0
-1
-2
-3
-4
-5
-6
-7
Dalla tabella a fianco si
può osservare come la
rappresentazione
in
modulo e segno sia
efficace ed immediata e
dia in modo rapido
l’opportunità all’utente di
rendersi conto di quale
numero sta utilizzando
SISTEMI DI NUMERAZIONE
RAPPRESENTAZIONE IN COMPLEMENTO A DUE
Per rappresentare i numeri relativi è molto conveniente ricorrere a questo metodo, anche perché è
decisamente più facile da implementare con circuiti elettronici. Per poter apprendere tale metodo è
necessario acquisire il concetto di complemento alla base, valido per tutti i sistemi e non solo per il
sistema binario.
Dato un sistema di numerazione in base b ed un numero N di n cifre, si definisce complemento del
numero alla base e si indica con N ( b) la differenza tra la potenza ennesima della base ed il numero
dato:
N (b) = b n - N
Consideriamo ad esempio il calcolo del complemento alla base del numero binario N = ( 11001 )2 =
= ( 25 )10 e vediamo come si procede al calcolo del complemento sia nel sistema binario, che nel
sistema decimale.
Nel sistema binario, si ha:
N( 2 ) = 25 - 11001 = 100000 – 11001 = 111
Nel sistema decimale, si ha:
N( 10 ) = 102 – 25 = 100 – 25 = 75
Come può essere utilizzato il complemento, ad esempio nelle operazioni di sottrazione binaria? Basta
osservare che volendo svolgere la sottrazione N2 - N1 , può essere verificato la seguente uguaglianza:
N2 – N1 = N2 + ( b n – N1 ) – b n = N2 + N1( b) – b n
Dove è possibile controllare che se si tolgono le parentesi la semplificazione ci riporta all’espressione
di partenza. Vediamo adesso di analizzare il risultato ottenuto, alla fine abbiamo scritto:
N2 – N1 = N2 + N1( b) – b n
cioè la differenza tra due numeri è pari alla somma tra il minuendo ed il complemento alla base del
sottraendo meno la potenza ennesima della base, essendo n il numero di cifre della coppia di numeri
su cui stiamo lavorando. Certamente è da osservare che questo metodo risulta particolarmente
oneroso, tuttavia possono verificarsi dei casi in cui è più facile procedere con il complemento.
Analizziamo adesso due casi particolarmente significativi:
1) Stiamo lavorando con due numeri N1 ed N2 tali che N1 > N2 ,applicando le definizioni precedenti
si ricava:
N2 – N1( b) = N2 - N1 + b n = b n – ( N1 – N2 )= (N1 – N2 )( b)
Cioè otteniamo il complemento di (N1 – N2) che rappresenta correttamente il valore negativo – (N1 –
N2 )
2) stiamo lavorando con due numeri N1 ed N2 tali che N1 < N2 , applicando le definizioni precedenti
si ricava:
N2 + N1( b) = N2 + ( b n – N1 )= N2 – N1 + b n
Cioè otteniamo il risultato corretto N2 – N1 , dopo aver eliminato b n ; questo accade se aggiungiamo
una restrizione ovvero che il numero n delle cifre usate per rappresentare i numeri sia fisso.
Alla luce degli esempi svolti possiamo definire in maniera rigorosa il complemento alla base
nell’ambito dei numeri binari:
N2(2) = ( 2 n )2 - N2
SISTEMI DI NUMERAZIONE
Dove ( 2 n )2 vuol dire semplicemente che la potenza n-esima della base va espressa in binario prima
di procedere, esattamente come abbiamo fatto nell’esempio numerico precedente. Accanto alla
definizione di complemento a due è possibile inserire quella di complemento a uno; si ha:
dato un numero N espresso da n cifre, si definisce complemento ad 1 del numero e si indica con N(
1)
la seguente espressione:
N(1) = ( 2 n – 1 ) – N
Ad esempio se vogliamo determinare il complemento ad 1 del numero ( 1011)2 = ( 11)10 si procede nel
modo seguente:
N( 1 ) = ( 24 – 1 ) – N = ( 10000 – 1 ) – 1011 = 1111 – 1011 = 0100
E’ anche possibile calcolare il complemento ad 1 ed il complemento a 2 di un numero usando un
procedimento decisamente più semplice. Dall’esempio precedente si vede infatti che il complemento
ad 1 del numero assegnato 1011 è dato da 0100 cioè il numero di partenza con 0 al posto di 1 e
viceversa; allora è possibile enunciare la seguente definizione:
Il complemento ad 1 di un numero binario assegnato si ottiene dal numero di partenza scambiando
gli 1 con 0 e viceversa.
Analogamente per quanto riguarda il complemento a due è possibile dare la seguente definizione:
Il complemento a 2 di un numero binario assegnato si ottiene dal numero di partenza, calcolando il
complemento ad 1 di quest’ultimo e poi aggiungendo 1 ovvero:
N(2) = N(1) + 1
Effettuando operazioni con i numeri binari abbiamo visto che non è detto sempre che si possa ottenere
un risultato avente un numero di bit pari od inferiore a quello degli operandi; questo può essere un
problema soprattutto quando si sceglie di operare in modo tale da avere sempre un numero di bit
prefissato ( definito campo utilizzato ). I sistemi elettronici digitali funzionano in modo tale da
eliminare in maniera automatica l’eventuale riporto che eccede il campo utilizzato, proprio perché
sono progettati per lavorare con un numero fissato di bit. Se si sommano con lo stesso campo ( cioè
con lo stesso numero di bit fissati ) può sorgere un problema se il risultato ha un numero di bit che
eccede il campo, infatti, in questo caso, il bit più significativo non può essere scartato altrimenti si
otterrebbe un risultato sbagliato.
E’ allora necessario riconoscere questa condizione che prende il nome do OVERFLOW ( superamento
della capacità ); esistono due modi di procedere per verificare l’esistenza dell’overflow:
1) Se i bit più significativi ( MSB Most Significant Bit in Inglese ) dei due operandi sono diversi
allora non vi è overflow, perché i segni sono diversi
2) Se i bit più significativi dei due operandi sono uguali allora, se è uguale anche il MSB del
risultato, c’è overflow.
SISTEMI DI NUMERAZIONE
Rappresentazione dei numeri non interi
Rappresentazione in virgola fissa
La posizione della virgola viene stabilita a priori e mantenuta fissa all’interno della cella di memoria
che si sta utilizzando per immagazzinare il numero binario . Il numero binario viene rappresentato
separando parte intera da parte frazionaria e precisamente inserendo la parte intera a sinistra della
virgola e la parte frazionaria a destra della virgola; il segno sarà come al solito il bit più a sinistra. Lo
schema è il seguente:
Segno
Parte intera
1 bit
n bit
,
Parte Frazionaria
m bit
Di solito si utilizza una rappresentazione a 16 bit in cui 1 bit è reso disponibile per il segno, 7 bit sono
disponibili per la parte intera ed 8 bit sono disponibili per la parte frazionaria.
E’ chiaro che questa rappresentazione permette comunque la possibilità degli spostamenti della
virgola, se la spostiamo dopo il termine di peso minore (cioè quello meno significativo) la
rappresentazione diventa uguale a quella di un numero intero.
Rappresentazione in virgola mobile
Questa rappresentazione è spesso indicata con il suo nome inglese ovvero FLOATING POINT ed è
molto usata per quanto riguarda i numeri binari non interi, perché, permettendo la rappresentazione
con mantissa ed esponente, rende più facile lavorare su tali numeri. Osserviamo che in un qualunque
sistema di numerazione un numero qualsiasi N può essere espresso nella forma:
N=m•be
essendo m la mantissa, e l’esponente e b la base del sistema :Ad esempio nel sistema decimale il
numero 20,52 può essere scritto nel modo seguente:
20,52 = 2052 • 10- 2 = 0,2052 • 102
che, come si può notare, è una rappresentazione esattamente corrispondente alla definizione data. E’
possibile distinguere due casi in particolare:
1) Se la mantissa è tale che ( 1/b ) ≤ m < 1 si ha la cosiddetta forma normalizzata.
2 ) Se la mantissa non appartiene a tale intervallo allora si ha la forma non normalizzata.
Nel nostro esempio la seconda scrittura è quella corrispondente alla forma normalizzata . Visto che il
discorso fatto è valido per tutti i sistemi di numerazione, è possibile anche nel sistema binario
esprimere dei numeri non interi con mantissa ed esponente. Ad esempio se volessimo rappresentare in
virgola mobile il numero binario 1111,101 si può osservare che:
1111,101 = 1111101 • 2–3 = 0,1111101 • 24
L’ultima scrittura rappresenta una forma normalizzata dove si è espresso l’esponente in forma
decimale solo per semplicità, mentre la rappresentazione corretta è con l’esponente anch’esso in
binario: Lo schema della rappresentazione in virgola mobile è il seguente :
Segno
Mantissa
Mantissa
1 bit
n bit
Segno
esponente
Esponente
m bit
SISTEMI DI NUMERAZIONE
Ad esempio potendo disporre di 16 bit per la rappresentazione, potremmo avere 12 bit riservati alla
mantissa ( di cui il primo è il segno ). Volendo rappresentare il numero – 101,01101100, avremo:
-101,01101100 = 0,10101101100 • 23
e quindi :
segno
1
mantissa
10101101100
segno
0
esponente
011
Per quanto riguarda lo svolgimento di operazioni in virgola mobile vediamo in modo particolare
l’addizione, per la quale si procede andando a confrontare gli esponenti degli addendi. Se gli
esponenti sono uguali, l’addizione è data dalla somma delle mantisse; ad esempio volendo effettuare
la somma tra 0,1010 • 22 e 0,0101 • 22 si avrà :
0,1010 +
0,0101 =
0,1111
ovvero il risultato sarà: 0,1111 • 22 .
Se invece gli esponenti sono diversi, per svolgere l’operazione occorre scalare il numero più piccolo
fino a portarlo allo stesso esponente del più grande e dopo eseguire l’addizione delle mantisse. Ad
esempio volendo svolgere la somma tra 0,1001 • 22 e 0,1010 • 21 si può procedere nel modo
seguente:
dapprima è necessario effettuare la trasformazione
0,1010 • 21 = 0,0101 • 22
dopo di che possiamo svolgere la somma delle mantisse
0,1001 +
0,0101 =
0,1110
Per quanto riguarda le altre operazioni bisogna osservare che la sottrazione può essere ricondotta ad
un’addizione complementando il sottraendo; per moltiplicazione e divisione si opera lavorando sia
sulle mantisse che sugli esponenti. Le mantisse vengono rispettivamente moltiplicate o divise, mentre
gli esponenti vengono rispettivamente sommati oppure sottratti.
Operazioni con il Sistema Esadecimale
Nei paragrafi precedenti abbiamo visto come esista una corrispondenza diretta tra il sistema
esadecimale ed il sistema binario, questo rende il sistema esadecimale molto utile per esprimere in
maniera sintetica i numeri binari. Non dimentichiamoci infatti che una singola cifra esadecimale è
rappresentata da 4 cifre binarie e pertanto è molto più facile, soprattutto per noi esseri umani,
manipolare numeri esadecimali piuttosto che lunghe stringhe di bit.
Vediamo ora come sia possibile effettuare le operazioni aritmetiche nel sistema esadecimale:
Addizione
Bisogna ricordarsi che esiste una perfetta corrispondenza tra le prime 10 cifre esadecimali e le cifre
decimali e che le cifre da A ad F corrispondono via via a 10, 11,…., 15. Tenendo a mente questa
particolarità è possibile realizzare l’addizione tra numeri binari semplicemnte svolgendola in colonna
come alla scuola elementare e facendo riferimento al valore numerico di ciascuna cifra.
SISTEMI DI NUMERAZIONE
La somma in colonna si effettua con le regole usuali, mettendo in colonna le cifre di peso uguale dei
due addendi e calcolando somma ed eventuale riporto alla colonna successiva; la regola è molto
semplice, se la somma della colonna è minore o uguale a 15 scriviamo semplicemente la cifra
esadecimale corrispondente, se invece la somma della colonna è maggiore di 15 si scrive come
risultato la parte che supera 16 e si riporta 1 nella colonna di peso immediatamente superiore.
Vediamo alcuni esempi di addizioni nel sistema esadecimale:
1
1
9 A
9 3
1 2 D
9 B
9 3
1 2 E
Sottrazione
Per quanto riguarda la sottrazione possiamo osservare che piuttosto che svolgerla in colonna, cosa
piuttosto disagevole, conviene ricondurla allo svolgimento di una somma, facendo qualcosa di
analogo a quello che è stato fatto per svolgere le sottrazioni in binario in complemento a 2. Risulta
molto facile effettuare il “complemento a 2” direttamente in esadecimale; per realizzarlo bisogna
sottrarre ogni cifra del numero esadecimale da F e poi sommare 1 al risultato così ottenuto.
Vediamo un esempio: vogliamo calcolare direttamente in esadecimale il complemento a 2 del numero
esadecimale C4
Passo 1: F - 4 = B
F–C=3
Passo 2: abbiamo ottenuto il numero 3B adesso a ciò che abbiamo ottenuto sommiamo 1
3B +1 = 3C
possiamo perciò concludere che il complemento a 2 di (C4)16 è pari a (3C)16
La sottrazione tra 2 numeri esadecimali allora è data dalla somma tra il minuendo ed il complemento a
2 del sottraendo
SISTEMI DI NUMERAZIONE
Codici numerici
L’utilizzo della numerazione binaria e la perfetta corrispondenza esistente tra il sistema binario ed i
sistemi ottale ed esadecimale fanno siche il sistema binario sia adatto per esprimere numeri, lettere
oppure altri simboli mediante delle successioni di bit definite “Stringhe”.
Esistono diverse tipologie di codici, ciascuno dei quali è basato su opportuni meccanismi per generare
la corrispondenza tra i simboli da codificare e le apposite stringhe di bit e ciascuno con differenti
specifiche e campi di applicazione. Possiamo distinguere due tipologie di codici; i codici pesati e
quelli non pesati. Sono pesati quei codici che permettono di svolgere operazioni aritmetiche tra i
simboli codificati, mentre sono non pesati quei codici per i quali tali operazioni non sono possibili.
Una ulteriore classificazione dei codici può essere fatta distinguendo i codici numerici e quelli
alfanumerici; sono numerici quei codici che fanno corrispondere ad una stringa di bit dei simboli di
tipo numerico, mentre sono alfanumerici quei codici che fanno corrispondere ad una stringa di bit dei
simboli che possono essere sia numerici che alfabetici.
Codice BCD
L’acronimo BCD che caratterizza questo codice spiega anche qual è il funzionamento del codice
stesso infatti la sigla BCD significa Binary Coded Decimal , ovvero decimali codificati come binari. Il
codice BCD infatti fa corrispondere a ciascuna delle 10 cifre che compongono il sistema decimale una
stringa di 4 bit, secondo la tabella:
Cifra
decimale
0
1
2
3
4
5
6
7
8
9
Stringa di bit
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
Seguendo la tabella si possono operare delle conversioni dirette tra numeri binari e codice BCD.
Vediamo alcuni esempi:
1) Se vogliamo convertire in BCD il numero 384 basta sostituire alla singola cifra decimale la
stringa di 4 bit corrispondente:
Numero decimale:
Numero BCD:
3
8
4
0011
1000
0100
La conversione tra decimale e BCD a questo punto darà: 384 → 001110000100
2) 2) Se volgliamo convertire in BCD il numero 9576 basta sostituire alla singola cifra decimale la
stringa di 4 bit corrispondente:
Numero decimale:
9
5
7
6
SISTEMI DI NUMERAZIONE
Numero BCD:
1001
0101 0111
0110
La conversione tra decimale e BCD a questo punto darà: 9576 → 1001010101110110
Con il codice BCD è possibile svolgere delle operazioni di addizione e correggere gli eventuali errori
di funzionamento del codice.
Anche in questo caso conviene procedere con degli esempi:
32 +
15 =
0011 0010 +
0001 0101
47
0100 0111
Come possiamo notare il risultato è ancora espresso mediante i simboli della tabella di conversione
pertanto l’addizione è stata svolta correttamente.
Le addizioni in BCD funzionano bene finché l’operazione in decimale non richiede un riporto
vediamo un esempio di tale situazione, per rendere meglio comprensibile la situazione:
37 +
15 =
0011 0111 +
0001 0101
52
0100 1100
notiamo che il risultato, nella colonna delle unità produce una stringa di bit data da 1100 che non
appartiene alla tabella e pertanto siamo portati a concludere che il codice in questo caso non abbia
funzionato. Tuttavia se osserviamo le cose con attenzione vediamo che il risultato ottenuto è di 4
decine e 12 unità cioè in tutto 52. Quindi numericamente il risultato è corretto, ma non lo è dal punto
di vista simbolico; bisogna riuscire a trovare un metodo per correggere questa disfunzione e ottenere
così un risultato corretto. A questo punto ci viene in aiuto il ragionamento, sappiamo che con 4 bit è
possibile rappresentare i numeri da 0 a 15, quindi 16 combinazioni. Noi però nella tabella abbiamo
utilizzato solo 10 delle 16 combinazioni disponibili, lasciandone quindi 6 non utilizzate. Tra la tabella
del BCD e la reale possibilità offerta dall’uso di 4 bit esiste pertanto una differenza di 6.
Vediamo cosa succede se aggiungiamo 0110 (cioè 6 in binario) al risultato ottenuto e se otteniamo una
serie di stringhe compatibile col codice.
0100 1100 +
0110
0101 0011
Come si può notare il risultato stavolta è corretto anche dal punto di vista simbolico. Quindi il BCD
funziona sempre e anche se dovessero sorgere dei problemi di funzionamento basta sommare 6 per
riportare il risultato ai simboli del codice.
Codice Gray (o codice riflesso)
Questo codice, contrariamente al BCD, è un codice non pesato e rappresenta i vari numeri con
combinazioni di 0 e 1 che formano stringhe tali che la stringa di bit che rappresenta un numero
differisce da quella del numero precedente e da quella del numero seguente per un solo bit (un po’
come accade tra le caselle delle mappe di Karnaugh).
Per costruire il codice Gray si procede secondo lo schema seguente:
-
si scrivono in colonna lo 0 el’1 e si tira una linea tratteggiata; al di sotto della linea tratteggiata si
scrivono le cifre “specchiate” cioè con ordina invertito ovvero prima l’1 e poi lo 0. Si mette uno 0
davanti alle cifre originarie , si mette 1 davanti alle cifre specchiate.
SISTEMI DI NUMERAZIONE
-
0
0
0
1
1
1
1
0
si procede ancora con lo stesso metodo specchiando le cifre ottenute e mettendo sempre 0 davanti
a quelle di partenza e mettendo sempre 1 a quelle riflesse e si reitera il procedimento fini a
quando non si raggiunge il numero di stringhe desiderato.
Per la sua natura e per il metodo utilizzato per la sua costruzione il codice Gray è adatto soprattutto
alla codifica di un numero di simboli che sia pari ad una potenza perfetta di 2 (4,8,16….) perché come
abbiamo visto il metodo della riflessione genera ogni volta una quantità di stringhe di bit che è
effettivamente una potenza perfetta di 2. Basandosi su questo aspetto e sulla riflessione possiamo
costruire una trabella per la conversione delle prime 16 cifre decimali (ovvero quelle del sistema
esadecimale) prima in binario e poi in codice Gray:
DECIMALE
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BINARIO
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
GRAY
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
Esistono dei metodi di calcolo rapidi per effettuare il passaggio dal binario al Gray e viceversa;
indichiamo i bit delle due codifiche con dei nomi convenzionali:
-
B3,B2,B1,B0 siano i bit del binario normale dal più significativo B3 al meno significativo B0;
-
G3,G2,G1,G0 siano i bit del codice Gray dal più significativo G3 al meno significativo G0;
osservando la tabella possiamo dedurre senza problemi che per quanto riguarda lla conversione da
binario a Gray si ha:
G3 = B3; G2 = B2 + B3; G1 = B1 + B2; G0 = B0 + B1
L’eventuale resto generato da queste addizioni deve essere ignorato e non considerato. Per quanto
riguarda la conversione inversa da Gray a binario normale possiamo osservare sempre dalle tabelle
che:
-
i bit più significativi coincidono
SISTEMI DI NUMERAZIONE
-
per gli altri bit osserviamo che si ottengono considerando la cifra Gray che occupa la stessa
posizione e sommandola alla cifra binaria nella posizione immediatamente a sinistra ignorando
l’eventuale resto
ovvero riepilogando:
B3 = G3; B2 = G2 + B3; B1 = G1 + B2; B0 = G0 + B1
Codice Eccesso 3
Si tratta di un codice non pesato che realizza la corrispondenza di un numero decimale con una stringa
di 4 bit. Il funzionamento è molto semplice perché per ottenere la corrispondenza basta aggiungere 3
alla cifra decimale da convertire e convertire in binario puro il risultato così ottenuto. Se ad esempio
volessimo convertire la cifra 5 otterremmo:
5 + 3 = 8 → 1000
se volessimo convertire la cifra 8 otterremmo:
8 + 3 = 11 → 1011
e così via. Possiamo a questo punto costruire una tabella per la conversione in codice eccesso 3 e
precisamente:
Decimale
0
1
2
3
4
5
6
7
8
9
Eccesso 3
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
La caratteristica fondamentale del codice eccesso 3 è quella di essere anticomplementantante ovvero
ogni numero decimale ed il suo complemento a 9 sono rappresentati da due numeri che sono
complementari ad 1 tra loro.
Ricordiamo che nel sistema decimale si definisce complemento a 9 di un numero la cifra che si ottiene
sottraendo ciascuna cifra del numero da 9.
Codice Aiken 2421
Si tratta di un codice pesato che fa corrispondere ad ogni cifra di un numero decimale una stringa di 4
bit. La tabella di conversione viene realizzata dando ai 4 bit i pesi 2421 da cui il nome del codice. Se
ad esempio prendiamo il numero 1101 vediamo che la corrispondenza la troviamo svolgendo i
seguenti calcoli:
1x2 + 1x4 + 0x2 + 1x1 = 2 + 4 + 0 + 1 = 7
la tabella di conversione, realizzata con il criterio appena enunciato sarà allora:
SISTEMI DI NUMERAZIONE
Decimale
0
1
2
3
4
5
6
7
8
9
Aiken 2421
0000
0001
0010
0011
0100
1011
1100
1101
1110
1111
Codice ASCII
Il codice ASCII (American Standard Code<for Information Interchange) è il codice alfanumerico più
diffuso nel mondo; infatti è il codice che viene normalmente utilizzato per far corrispondere ad
ognuno dei simboli che si trovano sulla tastiera una stringa di bit.
In modo particolare il codice ASCII fa corrispondere a 128caratteri alfanumerici una stringa di 7 bit; i
caratteri alfanumerici che compongono il codice sono in particolare le 10 cifre decimali, le lettere
maiuscole e minuscole e alcuni caratteri di controllo come @, # ecc.
Sono presenti diverse versioni di questo codice, soprattutto collegate ad alcune lingue in particolare;
nella tabella seguente viene riportata la versione USASCII, che è una delle più diffuse.
SISTEMI DI NUMERAZIONE
Vediamo che nella tabella non sono riportate proprio le stringhe di bit, ma il corrispondente valore
esadecimale e decimale; vediamo ad esempio che la lettera A corrisponde al valore esadecimale 41,
che corrisponde al decimale 65 ed alla stringa di bit 1000001
Esiste anche una versione estesa del codice ASCII, che codifica i caratteri introdotti solo
recentemente, questo porta il numero totale di simboli codificati a 256. La tabella seguente contiene
appunto una lista di tali caratteri e della corrispondente codifica ASCII, osserviamo che i
corrispondenti valori decimali vanno ovviamente da 128 a 255.
Nella tabella precedente possiamo osservare che tutti i simboli sono codificati con 8 bit, in modo tale
da poter permettere già in partenza l’estensione del codice.
SISTEMI DI NUMERAZIONE
E’ ovvio che per la sua stessa natura il codice ASCII è non pesato.
SISTEMI DI NUMERAZIONE
ESERCIZI PROPOSTI
Esercitazione 1
Esercizio 1
Convertire in esadecimale ed ottale i seguenti numeri decimali
•
•
•
•
•
•
236
435
8765
65536
64
876
Esercizio 2
Convertire in binario i seguenti numeri decimali:
•
•
•
•
•
•
•
32
54
16
48
254
123
445
Esercizio 3
Convertire in base 4 e base 6 i esguenti numeri decimali
•
•
•
856
247
136
Esercizio 4
Convertire in decimale i seguenti numeri:
ottali:
-
127
245
Esadecimali:
-
A034
C310
SISTEMI DI NUMERAZIONE
Esercitazione 2
Esercizio 1
Svolgere le seguenti addizioni tra numeri binari:
101101 + 11101
1111111 + 1
10000000 + 10000000
10011011 + 111001
Esercizio 2
Svolgere le seguenti sottrazioni tra numeri binari:
1000000 – 1
111111 – 1110
1000011 – 1100
101101 - 10111
Esercizio 3
Svolgere i seguenti prodotti tra numeri binari:
1000011 x 1100
11111 x 1001
10001101 x 1010
Esercizio 4
Svolgere le seguenti operazioni nel sistema binario:
25 – 12
14 + 37
11 + 15
SISTEMI DI NUMERAZIONE
Esercitazione 3
Esercizio 1
Convertire in binario i seguenti numeri decimali:
15.275 ; 18.25 ;
4.025 ;
3.0125;
Esercizio 2
Convertire in decimale i seguenti numeri binari:
101.1101 ;
1101.0011 ;
11.1011;1011.1010
Esercizio 3
Svolgere le seguenti somme in notazione esponenziale:
0.1011 · 2 2 + 0.0001 · 2 2
0.1011· 2 1 + 0.0001· 2 2
0.1110 · 2 3 + 0.0010 · 2 2
Esercizio 4
Rappresentare i seguenti numeri decimali in virgola mobile:
14.5;
32;
SISTEMI DI NUMERAZIONE
ESERCIZI CONCLUSIVI E DI RIEPILOGO
1) Convertire in esadecimale ed ottale i seguenti numeri decimali:
236, 435, 8765, 65536, 64, 876
2) Convertire in binario i seguenti numeri decimali:
32, 54, 16, 48, 254, 123, 445
3) Convertire direttamente in binario i seguenti numeri ottali:
44, 75, 107, 447, 124
4) Convertire direttamente in binario i seguenti numeri esadecimali:
A034, A042, F117, 56B2
5) Convertire direttamente prima in esadecimale e poi in ottale i seguenti numeri binari:
1000111100, 1110011, 1111111100, 110000011, 110010
6) Convertire in decimale i seguenti numeri binari:
11001, 111111, 1001100, 11000111, 1100110
7) Eseguire le seguenti somme in binario:
10000111+ 111001;
100001111011+1011000101
1000000+10000
10001100101+100001
8) Eseguire le seguenti sottrazioni in binario:
100001111-101100
10000101-11101
9) Scrivere in complemento ad 1 e poi in complemento a 2 i seguenti numeri binari
1000111100, 1110011, 1111111100, 110000011, 110010
10) Eseguire i seguenti prodotti tra numeri binari:
10001110x 101
100011110x100
11) eseguire in BCD le seguenti operazioni, correggendo eventualmente le stringhe che non
compaiono corrette
23 + 42; 18 + 27; 23 + 39; 125 + 88
12) Svolgere le seguenti operazioni in esadecimale:
A034 + C310; 2B2 + 1A; 198 – 25; A013 –25D