ITI
E Reggiani
Medi
Enrica
31/10/2010
NUMERI E CODICI
SISTEMI DI NUMERAZIONE
• Sistema posizionale e forma polinomiale del numero
ll sistema decimale è quello più congeniale all’uomo; il sistema binario è alla base della rappresentazione dei
numeri nel calcolatore e nei circuiti elettronici, che assumono solo due stati.
Sistema di numerazione latino=non posizionale
Alfabeto={I,V,X,L,C,D,M}
I=1
II=2 III=3 IV=4 V=5…
Numero= LXXXI (81)
Ogni simbolo ha un proprio valore; in un numero ogni simbolo presenta un aumento o diminuzione di valore in
base al fatto che si trovi prima o dopo un simbolo di valore maggiore.
L=50 + X=10 -> 60 +X= 70 + X=80 +I =81
Ciò implica notevoli difficoltà nei calcoli
In un sistema posizionale, ogni cifra assume un valore diverso a seconda della posizione che assume all’interno
del numero. Infatti, ad esempio, i numeri 123 e 231 significano:
123= 1 centinaio- 2 decine- 3 unità
231= 2 centinaia- 3 decine- 1 unità
dove:
1 decina= 10 unità
1 centinaio= 10 decine= 100 unità
ecc.
Nel nostro sistema decimale (e nei sistemi di numerazione moderni), esprimendo i seguenti numeri in forma
polinomiale, avremo:
123= 1*102 + 2*101 + 3*100
231= 2*102 + 3*101 + 1*100
i simboli 1,2,3 hanno un peso diverso a seconda della posizione.
Quindi DEFINIAMO:
Sistema di numerazione= insieme finito di simboli (alfabeto) e regole
Cifra= singolo simbolo dell’alfabeto
Numero= sequenza di una o più cifre
Base= numero degli elementi dell’alfabeto (deve essere base>1)
Esempi:
sistema decimale
Alfabeto={0,1,2,3,4,5,6,7,8,9}
Base=10
Numero=25410
(si usa esprimere la base accanto al numero)
sistema binario
Alfabeto={0,1} le cifre 0 e 1 sono dette bit (binary digit)
Base=2
Numero=10110
Il numero 102 non è binario in quanto non usa i simboli del suo alfabeto
Sistema ottale
Alfabeto={0,1,2,3,4,5,6,7}
Base=8
Numero=2548
Il numero 258 non è un numero nel sistema ottale
numeri_codici
1
Enrica Reggiani
31/10/2010
ITI E Medi
sistema esadecimale
Alfabeto={0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F} dove si ha la seguente corrispondenza:
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
Base=16
Numero=2F16
È possibile utilizzare qualsiasi sistema di numerazione (in base 3,4,5…)
In Informatica si utilizza il sistema binario; si usano anche i sistemi ottale e esadecimale (in quanto 8 e 16
sono potenze di 2) che consentono di scrivere, con poche cifre, lunghi numeri binari.
• Sistema sistemi di numerazione e conversioni di base
CONVERSIONE DA DECIMALE A BINARIO
Si divide il numero per la base 2 e si considerano i resti; la divisione si ferma quando il dividendo diventa
minore del divisore.
1310 = 11012
13 2
1 6 2
0 3 2
1 1
si procede in modo analogo per le altre basi
CONVERSIONE DA BINARIO A DECIMALE
11012 = 1*20 + 0*21 + 1*22 +1*23 = 1+4 +8 =13
si considerano le singole cifre del numero da destra verso sinistra; ogni singola cifre viene moltiplicata per la
base 2 tenendo conto della posizione (elevata alla posizione).
si procede in modo analogo per le altre basi.
nel SISTEMA ESADECIMALE è necessario ricordare la corrispondenza tra i simboli dell’alfabeto e i valori
decimali:
simbolo
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}
Valore decimale 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Quindi:
33110 = 14B16
331
16
11 (B) 20 16
4 1
Viceversa:
14B16 = B*160 + 4*161 + 1*162 = 11*1+ 64+ 256= 33110
per trasformare un numero da una base b1 a una base b2, si converte il numero
base 10 alla base b2. tuttavia è possibile anche effettuare una conversione
tabelle di conversione.
Esempio: convertire il numero esadecimale 2A in binario
prima lo converto in decimale: 2A16 = A*160 + 2*161 = 10 + 2*16= 10+32= 4210
poi converto il decimale in binario: 4210 = 1010102
numeri_codici
dalla b1 alla base 10 e poi dalla
diretta utilizzando opportune
42 2
0 21 2
1 10 2
0 5 2
1 2 2
0 1
2
ITI E Medi
Enrica Reggiani
31/10/2010
OPPURE si utilizza la tabella:
decimale binario esadecimale
0
0000 0
1
0001
1
2
0010
2
3
0011
3
4
0100
4
5
0101
5
6
0110
6
7
0111
7
8
1000
8
9
1001
9
10
1010
A
11
1011
B
12
1100
C
13
1101
D
14
1110
E
15
1111
F
Per convertire da binario a esadecimale: si raggruppano le cifre del numero binario e gruppi di 4 (aggiungendo
bit 0 non significativi a sinistra) e si associano le singole cifre:
0010 1010
2
A
per convertire da esadecimale a binario si sostituiscono e valori binari alle singole cifre e si tolgono gli 0 non
significativi:
2
A
0010 1010
quindi 101010
• Operazioni binarie (somma –differenza)
ATTENZIONE: La base del sistema di numerazione determina il modo in cui vengono “raggruppate” le unità
Nel sistema decimale, la base 10 implica che:
10 unità=1 decina
10 decine= 1 centinaio
ecc.
valgono le seguenti regole:
9+1=10 (0 unità e 1 decina)
99+1=100 (0 unità, 0 decine, 1 centinaio)…
quindi:
1
1 2 3 +
2 7 =
1 5 0
1
1
1 2 3 2 7 =
9 6
in modo analogo per la moltiplicazione e la divisione
nel sistema binario due unità costituiscono un “ambo”…
valgono le seguenti regole:
0+0=0
1+0=1
0+1=1
1+1=10
numeri_codici
3
ITI
E Medi
Enrica Reggiani
31/10/2010
quindi:
1
1
1
1
1 1 1 +
1 1 =
0
1 0 1 0
Si procede in modo analogo
0 1 1 1 =
1 0
per la moltiplicazione e la divisione.
Tuttavia tutte le operazioni aritmetiche sono riconducibili alla somma (v. sotto), quindi è sufficiente saper
eseguire le somme in binario. Infatti, dati due interi a e b:
1. per eseguire la differenza b-a (con a>b)
es.7-4=3 4+1=5+1=6+1=7
somma 1 per 3 volte fino a raggiungere 7
2. per eseguire il prodotto a*b
es. 2*3= 2+2+2=6
somma 2 per 3 volte
3. per eseguire il quoziente a/b
es. 7/2= 2+2=4+2=6 somma 2 per 3 volte, quindi risulta 3
8/2=2+2=4+2=6+2=8 somma 2 per 4 volte, quindi risulta 4
RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE
l’unita’ fondamentale di informazione e’ il bit, che non e’ sufficiente per codificare tutte le informazioni;
quindi si usano dei multipli di bit:
•
con 4 bit è possibile codificare 24 =16 informazioni
•
con 8 bit (1 byte) e’ possibile codificare 28 =256 informazioni, ecc.
Un insieme di byte costituisce la parola (word) che puo’ essere immaginata come una cella di memoria, cioe’
una locazione fisica in cui e’ possibile memorizzare le informazioni binarie. Ogni cella di memoria deve poter
essere identificata univocamente, per potervi accedere senza essere confusa con le altre: deve quindi avere
un proprio numero identificativo, l’indirizzo, che deve essere anch’esso memorizzato per poter recuperare le
informazioni quando necessarie all’elaborazione.
i multipli di bit sono:
•
8 bit= 1 byte
•
1024 byte (210 byte)= 1 kilobyte (Kb)
•
1024 Kb = 1 Megabyte (Mb)
•
1024 Mb = 1 Gigabyte (Gb)
•
1024 Gb = 1 Terabyte (Tb)
La memoria e’ quindi caratterizzata dai seguenti parametri:
•
dimensione della parola: numero di byte che costituiscono la parola (attualmente gli elaboratori usano
parole 4 byte (32 bit) o 8 (64 bit)
•
dimensione complessiva della memoria: un personal computer oggi ha una memoria complessiva che va da
un minimo di 1 GB e oltre
•
velocita’ con cui risponde alle richieste
•
modalita’ di accesso (lettura e/o scrittura) e natura di permanenza o volatilita’:
si distingue tra ROM e RAM; la memoria centrale deve contenere dispositivi di entrambi i tipo:
RAM (radom access memory): per poter leggere informazioni e scriverne di nuove (quindi e’ memoria di
lettura/scrittura); questi dispositivi sono subordinati al passaggio della corrente elettrica, quindi se la
macchina viene spenta il suo contenuto viene perso: e’ memoria volatile
ROM (read only memory): memorie di sola lettura, meno costose delle RAM, necessarie per memorizzare
informazioni in modo permanente (ad esempio in fase di accensione e avvio del sistema, quelle relative al
bootstrap (caricamento del SO)); sono quindi memorie permanenti.
numeri_codici
4
ITI
E Medi
Enrica Reggiani
31/10/2010
la memorizzazione delle informazioni nel sistema di calcolo avviene in modo diverso a seconda che si tratti di
numeri o caratteri.
• La rappresentazione dei numeri interi
I numeri interi, dotati di segno e modulo, possono essere rappresentati:
Con modulo e segno
In complemento a 2
In generale numeri naturali sono rappresentati, all’interno dei sistemi di calcolo, in binario con formato fisso:
quindi se il numero necessita di un numero di bit inferiori a quello fornito dal formato, le posizioni di bit non
utilizzate sono riempite con 0 non significativi.
I formati più diffusi sono:
• Byte (o octect= 8 bit)
• Word (parola= 16 bit= 2 byte)
• Long word (32 bit= 4 byte)
Per semplicità utilizziamo un formato fisso a 4 bit (semibyte o nibble): questo non è reale ma serve per
semplificare il discorso
… … … …
Quindi per esprimere il numero 3, equivalente al binario 112, avremo:
0 0 1 1
RAPPRESENTAZIONE CON MODULO E SEGNO
In questo caso per memorizzare un numero intero con segno occorrono 4
bit: il primo bit serve per il segno:
i numeri positivi hanno il bit di segno 0
i numeri negativi hanno il bit di segno 1
i restanti 3 bit servono per rappresentare il numero.
Quindi il numero +3 viene rappresentato con 0011; il numero –3 viene
rappresentato con 1011
Poiche’ il primo bit serve per il segno, restano 3 caselle libere che possono
essere occupate in 23 = 8 modi diversi (per esprimere i moduli da 0 a 7,
cioè i numeri da –7 a +7).
Quindi esiste uno zero positivo (0000) e uno zero negativo 1000!.
In questo caso se si vuole rappresentare un numero superiore a +7 (23-1)
si ha un overflow, cioè la dimensione del numero eccede il formato e si
perde la cifra più significativa del numero (quindi il numero perde il suo
significato); analogamente se si rappresenta un numero inferiore a –7, si
ha un underflow.
segno
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
modulo
111
110
101
100
011
010
001
000
000
001
010
011
100
101
110
111
Numero decimale
+7
+6
+5
+4
+3
+2
+1
+0
-0
-1
-2
-3
-4
-5
-6
-7
Inoltre osserviamo che la somma tra due numeri opposti non è 0; infatti +7-7=0 ma in binario usiamo:
0111+1111= 10110 che eccede il formato (overflow) con perdita della cifra più significativa; otteniamo 0110
che equivale al decimale 6!
NOTA: analoghe considerazione vanno fatte in caso si utilizzino formati a 16 bit, ecc.
Quindi per rappresentare i numeri negativi non si puo’ usare la stessa codifica perche’ altrimenti la somma di
due numeri opposti non darebbe 0. Si ricorre alla regola del complemento a due.
numeri_codici
5
EnricaE
Reggiani
ITI
Medi
31/10/2010
RAPPRESENTAZIONE IN COMPLEMENTO A DUE
Definiamo complemento di un numero K di x cifre rispetto ad una base B, il numero Kc ottenuto con la
formula: Kc= Bx-K
Esempio se K=23810 il suo complemento a 10 è Kc= 103-238= 1000-238 =762
Esiste un metodo pratico per ottenere il complemento del numero rispetto alla
base B: si complementano le singole cifre del numero alla base –1 e si aggiunge 1:
numero 2 3 8
7 6 1 +
1 =
complemento 7 6 2
Analogamente per ottenere il complemento a 2 di un numero binario si calcola il
complemento a 1 (2-1) di ogni cifra e si aggiunge 1; in pratica si invertono tutti i bit del
numero e si aggiunge 1
(+710) 0 1 1 1
1 0 0 0 +
1
1 0 0 1
Per rappresentare i numeri interi binari con segno si adottano le seguenti CONVENZIONI:
• I numeri positivi hanno come bit di segno 0 e come modulo la conversione binaria
(rappresentazione con modulo e segno)
• I numeri negativi hanno come bit di segno 1 e sono rappresentati in complemento a 2
In questo modo la somma di due numeri opposti è uguale a zero (a meno del
riporto che va in overflow); nell’esempio visto sopra infatti avremo, nel numero +7 +
binario ottenuto, un riporto di 1 che eccede il formato e quindi va perso; il -7 =
risultato di 0111+1001 è 0000.
0
1
del numero
1
1
1
0 1 1 1 +
1 0 0 1 =
0 0 0 0
• La rappresentazione dei numeri reali
Per rappresentare qualunque numero non intero (cioe’ reale) si possono usare due modi diversi:
La notazione in virgola fissa (es.+3.54
-34.5 +34.0 …)
La notazione in virgola mobile o floating point (es.+1.354. 10+3, +0.0354.10-2 notazione scientifica , oppure:
0.354E+1, 0.0354E+2 notazione esponenziale).
Quando i numeri sono molto grandi o molto piccoli o hanno molte cifre decimali la loro rappresentazione è
difficoltosa con la notazione in virgola fissa e si preferisce la notazione floating point.
Nella notazione scientifica rileviamo 3 parti: il segno (+/-), la matissa (1.354) e l’esponente o caratteristica
(+3).
Di solito viene utilizzata la notazione normalizzata: la parte intera del numero e’ 0 e la prima cifra decimale e’
diversa da zero; quindi +1.354. 10+3 diventa +0.1354. 10+4.
Ogni sistema di elaborazione ha una propria modalita’ di rappresentazione dei numeri reali, ma in genere
vengono utilizzati 4 byte (cioe’ 32 bit): il primo bit serve per il segno dell’esponente, i bit dal secondo
all’ottavo memorizzano il valore dell’esponente, i bit dal nono al trentaduesimo contengono il valore della
mantissa.
S
esponente matissa
1 bit 8 bit
23 bit
La rappresentazione di tali numeri nella memoria dell’elaboratore subisce una limitazione dovuta alle
dimensioni fisiche della cella di memoria (4 byte oppure 8 byte ecc.), che riduce e approssima le cifre
significative del numero (cio’ avviene anche nelle normali calcolatrici): si parla di precisione semplice quando i
reali sono rappresentati utilizzando celle di 4 byte, di precisione doppia quando si utilizzano 8 byte.
Per la conversione da binario a decimale si opera in modo analogo alla conversione degli interi:
10.12= 0*20 + 1*21 + 1*2-1 = 2.5
numeri_codici
6
ITI
E Medi
Enrica Reggiani
31/10/2010
per convertire da decimale a binario:
- per la parte intera ci si comporta come per i numeri interi
- per la parte decimale si procede in questo modo: si moltiplica per 2 la parte frazionaria; dal risultato si
toglie la parte intera e si ripete fino a quando la parte frazionaria diventa 0 o si ottiene un numero di cifre
adeguato per esprimere la precisione
esempio: converto il decimale 5.6572
la parte intera 5 diventa 101
per la parte frazionaria:
frazione
prodotto Parte intera
0.6572*2= 1.3144
1
0.3144*2= 0.6288
0
0.6288*2= 1.2576
1
0.2576*2= 0.5152
0
….
Quindi otteniamo 101.1010
CODIFICA DEI DATI
• Dati e bit
I dati possono essere classificati in:
• numerici
• alfanumerici
nell’elaboratore tutte i dati sono rappresentati attraverso sequenze di bit 0 e 1 in quanto la memoria della
macchina è in grado di gestire solo due stati (passaggio di corrente/ non passaggio di corrente).
Il processo attraverso il quale si fa corrispondere ad un dato una sequenza di bit è detto “codifica”.
Con 1 bit, che può assumere valori 0 e 1, possiamo rappresentare 2 dati; con 2 bit possiamo rappresentare 22 =
4 dati; con 3 bit possiamo rappresentare 23 = 8 dati, ecc.
n° di bit
1
2
3
simboli rappresentabili
0
1
00
01
10
11
000
001
010
011
100
101
110
111
….
n
n° di simboli diversi
2 (=21)
4 (=22)
8 (=23)
2n
Quindi possiamo anche chiederci quanti bit ci servono per rappresentare m dati diversi.
È necessario determinare il numero n tale che 2n>=m
Se dobbiamo rappresentare 10 dati diversi (ad esempio le cifre ‘0’, ‘1’, ‘2’,…’9’) ci servono n bit in modo che
2n>=9; con n=3 possiamo rappresentare solo 8 dati diversi, con n=4 possiamo rappresentare 16 dati diversi;
quindi abbiamo bisogno di 4 bit; alcune sequenza di bit non sono utilizzate, ma con solo 3 bit non saremmo
riusciti a rappresentare tutti i dati.
Esistono diversi tipi di codici per rappresentare i dati numerici e i dati alfanumerici; si parla quindi di
CODICI NUMERICI (tra cui il codice BCD, il codice Gray, il codice Eccesso 3, il codice Aiken…) e CODICI
ALFANUMERICI (tra cui il codice ASCII, il codice EBCDIC, il codice ISO 8859, il codice UNICODE…)
numeri_codici
7
ITI
E Medi
Enrica Reggiani
31/10/2010
• Codici binari
Per definire un codice è necessario definire:
il suo alfabeto; nel caso degli elaboratori utilizziamo codici binari il cui alfabeto è costituito dai simboli
{0,1}
la lunghezza delle parole, cioè delle sequenza di bit (come visto sopra)
la lunghezza minima della parola deve essere tale da codificare in modo non ambiguo gli elementi dell’insieme.
Un codice è ambiguo quando una parola corrisponde a più dati da codificare (come nella lingua parlata), cioè
quando la lunghezza delle sue parole è inferiore alla lunghezza minima.
Un codice è efficiente quando la lunghezza delle sue parole è uguale alla lunghezza minima.
Un codice è ridondante quando la lunghezza delle sue parole è superiore alla lunghezza minima.
Consideriamo alcuni esempi di codici sopra citati.
I codici possono essere:
• numerici, per rappresentare i numeri composti da cifre
• alfanumerici, per rappresentare stringhe composte da una successione di caratteri alfabetici, caratteri
speciali (es. @, #, ?,’,,;…), e numeri trattati come lettere (su cui non vengono effettuati calcoli: es. un
numero di telefono, i numeri di un codice fiscale, ecc).
CODICE BCD (BINARY-CODED DECIMAL): è un codice numerico efficiente che consente di rappresentare
ogni cifra numerica decimale per mezzo di 4 bit
DECIMALE
0
1
2
3
4
5
6
7
8
9
BCD
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
9
2
La codifica in BCD di un numero in base 10 avviene cifra per cifra; per 6
0110 1001 0010
esempio, dato il numero 692, la sua codifica è:
Viceversa il numero binario 1000 0011 0000 corrisponde al decimale 830.
Questo codice offre il vantaggio di consentire una veloce conversione binario- decimale e
viceversa in modo veloce, senza effettuare calcoli come visto in precedenza.
Gli svantaggi sono:
- utilizza più bit per codificare un numero da decimale a binario rispetto al binario puro;
infatti il numero 10 in BCD è 0001 0000, mentre in binario puro è 1010
- la somma è la sottrazione sono più complesse
CODICE ASCII (American Standard Code for Information Interchange): è un codice alfanumerico efficiente
a 7 bit; quindi consente di codificare 27 =128 simboli diversi (tra cui cifre numeriche, caratteri maiuscoli e
minuscoli, punteggiatura, simboli aritmetici e altri simboli quali & @ #…); 128 simboli sono sufficienti a
consentire la codifica dei simboli dell’alfabeto latino (ma non consente di rappresentare le lettere accentate).
Non tutti i caratteri sono stampabili e sono caratteri di trasmissione (su reti di telecomunicazione), di
formato (sui supporti di input/output) e ausiliari. Ad esempio il decimale 4= ascii eot (end of transmission)
indica fine trasmissione, il decimale 13= ascii cr (carriage return) indica un ritorno a capo, il decimale 7= ascii
bel indica l’emissione di un suono.
Osservando la tabella si può notare che le cifre numeriche ‘0’, ‘1’, …, ‘9’ sono codificate con i valori decimali
48, 49, …57; questo significa che per convertire una cifra numerica in numero intero basta togliere 48 al
codice di ogni carattere.
Si nota inoltre che che i caratteri maiuscoli precedono quelli minuscoli (hanno valore decimale inferiore); tra
un carattere alfabetico maiuscolo e uno minuscolo c’è una differenza di 32, quindi per trasformare un
carattere da minuscolo al corrispondente maiuscolo è sufficiente sottrarre 32 (viceversa aggiungo 32 per
passare da maiuscolo a minuscolo):
se ‘a’ -> 97 e ‘A’-> 65
97-32=65 cioè ‘A’
numeri_codici
8
ITIEnrica
E Medi
Reggiani
31/10/2010
DECIMALE ASCII DECIMALE ASCII DECIMALE ASCII DECIMALE ASCII
0
nul
1
4
eot
5
8
bs
12
soh
2
stx
3
etx
enq
6
ack
7
bel
9
ht
10
lf
11
vt
ff
13
cr
14
so
15
si
16
dle
17
dc1
18
dc2
19
dc3
20
dc4
21
nak
22
syn
23
etb
24
can
25
em
26
sub
27
esc
28
fs
29
gs
30
rs
31
us
32
blank
33
!
34
"
35
#
36
$
37
%
38
&
39
'
40
(
41
)
42
*
43
+
44
,
45
-
46
.
47
/
48
0
49
1
50
2
51
3
52
4
53
5
54
6
55
7
56
8
57
9
58
:
59
;
60
<
61
=
62
>
63
?
64
@
65
A
66
B
67
C
68
D
69
E
70
F
71
G
72
H
73
I
74
J
75
K
76
L
77
M
78
N
79
O
80
P
81
Q
82
R
83
S
84
T
85
U
86
V
87
W
88
X
89
Y
90
Z
91
[
92
\
93
]
94
^
95
_
96
`
97
a
98
b
99
c
100
d
101
e
102
f
103
g
104
h
105
i
106
j
107
k
108
l
109
m
110
n
111
o
112
p
113
q
114
r
115
s
116
t
117
u
118
v
119
w
120
x
121
y
122
z
123
{
124
|
125
}
126
~
127
del
esiste anche la versione del codice ASCII a 8 bit, detto ASCII esteso, che consente di rappresentare 256
caratteri; quindi permette di rappresentare simboli grafici, tra cui le lettere accentate, e caratteri
appartenenti alle diverse lingue.
CODICE UNICODE (definito dalla Unicode Consortium e International Organization for Standardization):
rappresenta i caratteri utilizzando 2 byte, cioè 16 bit; quindi garantisce 216 = 65536 simboli; in questo modo è
possibile rappresentare tutte le varianti dell’alfabeto latino (comprese le lettere accentate e con simboli
particolari) ma anche tutti gli altri alfabeti. I primi 256 caratteri corrispondono a quelli del codice Ascii.
numeri_codici
9