Codifica dell’Informazione
1
Programmazione - Michele Colajanni, 2003/2004
Esempi di segnali binari
levetta:
alta/bassa
tensione elettrica:
High/Low
contatto:
aperto/chiuso
cristallo liquido:
trasparente/opaco
Programmazione - Michele Colajanni, 2003/2004
lampadina:
accesa/spenta
corrente elettrica:
presente/assente
2
1
Variabili binarie
BIT (BInary digiT) - Variabile x tale che:
x ∈ B{0,1}
Un bit può rappresentare un segnale binario.
Bisogna però decidere quale valore “fisico” è rappresentato dal
simbolo “matematico” 1. Esistono infatti due diverse possibilità
usualmente denominate logica positiva e negativa
I Interruttore I
0
alto
1
1
basso
0
C
0
1
Contatto
aperto
chiuso
C
1
0
L
0
1
Lampada
accesa
spenta
L
1
0
logica negativa logica positiva
Programmazione - Michele Colajanni, 2003/2004
3
Configurazioni binarie
Configurazione binaria di n bit - E’
n bit
una stringa di n caratteri 0 e 1.
Con una configurazione di n bit si
Bn-1
B2 b1 b0
possono codificare 2n informazioni
• n bit hanno 2n configurazioni binarie diverse.
• Una configurazione di n bit può rappresentare
i valori di n segnali binari ad un certo istante.
Es: n=3
•
Una configurazione di n bit può rappresentare
cba
i valori di un segnale binario in n istanti.
000
100
010
c
0
001
x
110
1
0 0
b
0
101
ta tb tc
011
a
0
111
4
Programmazione - Michele Colajanni, 2003/2004
2
Codice binario
Codice binario - Funzione dall’insieme delle 2n configurazioni
di n bit ad un insieme di M informazioni (simboli alfanumerici,
colori, eventi, stati interni, ecc.).
Condizione necessaria per la codifica: 2n ≥ M
2n
config.
0 0 0 ……..0
1 0 0 ……..0
0 1 0 ……..0
1 1 0 ……..0
0 0 1 ……..0
0 0 1 ……..1
z
non utilizzato
1
5
a
M
informazioni
?
m
0 1 1 ……..1
1 1 1 ……..1
Programmazione - Michele Colajanni, 2003/2004
5
Proprietà di un codice
Il codice è una rappresentazione convenzionale dell’informazione
La scelta di un codice è condivisa da sorgente e destinazione
ed ha due gradi di libertà:
• il numero di bit (qualsiasi, a patto che sia 2n ≥ M )
• l’associazione tra configurazioni e informazioni;
a parità di n e di M le associazioni possibili sono:
2n ! / (2n -M)!
Codice standard - Codice fissato da norme internazionali (de iure)
o dal primo costruttore che risulta utile per tutti gli altri (de facto).
• L’uso di codici standard nelle unità di I/O consente di collegare
macchine realizzate da costruttori diversi
Programmazione - Michele Colajanni, 2003/2004
6
3
0
1
più
meno
segno
Esempi
1
0
Cifre decimali
Altri
29
miliardi
di
codici
a
4 bit
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
BCD
zero
uno
due
tre
quattro
cinque
sei
sette
otto
nove
Programmazione - Michele Colajanni, 2003/2004
1111110
0110000
1101101
1111001
0110011
1011011
0011111
1110000
1111111
1110011
7 segmenti
1000000000
0100000000
0010000000
0001000000
0000100000
0000010000
0000001000
0000000100
0000000010
0000000001
uno su dieci
(1= acceso)
7
Codice BCD (Binary Coded Decimal)
Ad ogni cifra decimale sono associati 4 bit, secondo la
tabella seguente:
Cifra Decimale
0
1
2
3
4
5
6
7
8
9
Cifra BCD
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
Dalla tabella è possibile osservare che esistono delle
configurazioni non usate dal codice BCD: [1010...1111] (in
quanto necessita di 10 delle 16 configurazioni possibili).
Programmazione - Michele Colajanni, 2003/2004
8
4
Codice BCD (cont.)
Utilizzando il codice BCD si ha una corrispondenza
biunivoca fra il numero di cifre decimali e binarie
Questo codice consente di avere dei circuiti
visualizzazione dei numeri decimali più semplici
di
Esempio
Codifica del numero decimale 27 con il codice BCD:
27
0010 0111
9
Programmazione - Michele Colajanni, 2003/2004
Codice 1 su N
E’ un codice che associa ad ognuna delle n possibili
configurazioni una stringa di n bit avente un solo bit ad 1
Esempi
Calcolatori tascabili: utilizzato per immettere dati attraverso la tastiera
numerica
Negli ascensori: è utilizzato per visualizzare la posizione dei piani
raggiunti e per selezionare il piano da raggiungere:
Pulsanti ascensore
Codifica 1 su N
3
1000
2
0100
1
0010
T
0001
Programmazione - Michele Colajanni, 2003/2004
10
5
Codice a sette segmenti
Codice utilizzato nei display per consentire la
rappresentazone grafica di cifre decimali.
Impiega 7 bit (a,b,c,d,e,f,g) per codificare i 10 simboli
decimali
a
a
f
1
g
b
c
e
f
abcdefg
0110000
g
b
c
e
d
a
d
9
f
abcdefg
1111011
g
b
c
e
d
Programmazione - Michele Colajanni, 2003/2004
11
Codice a matrice di punti
Impiega MxN bit per consentire la rappresentazione di
simboli grafici su una matrice di punti di M righe e N
colonne .
Utilizzato per la visualizzazione dei caratteri nei monitor, nei
display dei telefonini, nei display delle calcolatrici,...
0000000
N
0000000
0011000
0100100
0100100
M
0111100
………..
0000000
Programmazione - Michele Colajanni, 2003/2004
12
6
Classi di informazione da codificare
all’interno del calcolatore
• Informazione alfanumerica
– Codice ASCII (necessario 1 byte)
• Indirizzi di memoria
– Rappresentazione posizionale
• Sono numeri interi positivi (necessari più byte)
• Numeri
– Rappresentazione decimale codificata
– Rappresentazione posizionale
• Numeri interi positivi e negativi
• Numeri frazionari
13
Programmazione - Michele Colajanni, 2003/2004
Codice ASCII
Il codice ASCII è non ridondante, perché i simboli codificati sono in
numero pari alle configurazioni ottenibili con 7 cifre binarie.
Ampiamente utilizzato in computer, stampanti, trasmissione dati,…
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
000
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI
001
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US
010
!
“
#
$
%
&
‘
(
)
*
+
,
.
/
011
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
100
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
101
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
110
°
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
111
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL
Sono numeri interi positivi (necessario un byte)
Programmazione - Michele Colajanni, 2003/2004
14
7
Indirizzi
•
•
•
•
Necessari per memorizzare informazioni complesse
Indicano (puntano a) una locazione di memoria
Sono numeri interi positivi (su più byte)
Esiste un legame tra la dimensione della word e la
dimensione massima della memoria (il numero di bit di un
indirizzo binario denota l’indirizzo massimo
rappresentabile)
CPU
8080
8086
80286
80486
Pentium
Bit per indirizzo
16 bit
20 bit
24 bit
46 bit
46 bit
Memoria massima
64 Kbyte (KB)
1 Megabyte (MB)
16 Megabyte
64 Terabyte (TB)
64 Terabyte
15
Programmazione - Michele Colajanni, 2003/2004
Unità di misura
• Unità di misura standard
Byte (insieme di 8 bit) e suoi multipli
• Multipli
1 KiloByte=
x1024
=
x1024
=
x1024
=
x1024
=
1.024 byte
1 MegaByte
1 GigaByte
1 TeraByte
1 PetaByte
• Abbreviazioni
Kb = Kilobit
Mb = Megabit
Gb = Gigabit
Programmazione - Michele Colajanni, 2003/2004
=
=
=
=
1.048.576 byte
1.073.741.824 byte
1.099.511.627.776 byte
….. byte
KB = KiloByte
MB = MegaByte
GB = GigaByte
16
8
Rappresentazione
dei numeri
17
Programmazione - Michele Colajanni, 2003/2004
Sommario
• Introduzione
• Rappresentazione dei numeri interi positivi
• Rappresentazione dei numeri interi
• Operazioni aritmetiche
• Rappresentazione dei numeri frazionari
– Numeri in virgola fissa
Nel Corso di
“Architetture
dei
Calcolatori”
– Numeri in virgola mobile
Programmazione - Michele Colajanni, 2003/2004
18
9
Sommario
• Introduzione
– Numeri
– Numerali
– Basi
• Rappresentazione dei numeri interi
positivi
• Rappresentazione dei numeri interi
• Operazioni aritmetiche
Programmazione - Michele Colajanni, 2003/2004
19
Numeri e numerali
Numero: entità astratta
Numerale: stringa di caratteri che rappresenta un
numero in un dato sistema di numerazione
Lo stesso numero è rappresentato da numerali diversi
in sistemi diversi. Es.,
– 156
– CLVI
nel sistema decimale
in numeri romani
Il numero di caratteri nel numerale determina l’intervallo
di numeri rappresentabili. Es.,
– interi a 3 cifre con segno in notazione decimale: [-999,+999]
Programmazione - Michele Colajanni, 2003/2004
20
10
Numerali: regole fondamentali
• Un numerale è solo una stringa di cifre
• Un numerale rappresenta un numero solo se si
specifica un sistema di numerazione
• Lo stesso numerale rappresenta diversi numeri in
diverse notazioni
Esempio
La stringa 110100 rappresenta:
–
–
–
–
–
–
Centodiecimilacento in base 10
(+52)10 in binario naturale
(-11)10 in complemento a 1
(-12)10 in complemento a 2
(+20)10 in eccesso 16
Un numero dell’ordine di vari milioni in esadecimale
21
Programmazione - Michele Colajanni, 2003/2004
Numeri a precisione finita
Nel momento in cui si utilizzano numerali con un numero finito
di cifre:
• Si perdono alcune proprietà dei numeri, quali:
– chiusura operatori ( + , −, × )
– proprietà associativa, distributiva, …
Esempio: numerali decimali con due sole cifre frazionarie
• ovvero 2 cifre decimali e segno [-99,+99]
• 78+36=114 (no Chiusura)
• 60+(50-40) ≠ (60+50)-40 (no Associatività)
• Vi sono errori di arrotondamento
• Vi sono buchi nella rappresentazione dei reali
Esempio
– usando numerali decimali con due sole cifre frazionarie:
?
0
0.01
Programmazione - Michele Colajanni, 2003/2004
0.02
22
11
Sistemi di numerazione
Posizionali
Il valore di un simbolo dipende dalla posizione che esso
occupa all’interno della configurazione, seguendo una
legge nota. I vari sistemi di numerazione posizionale
differiscono per la scelta della base B. La base B indica
il numero di simboli usati (0, …, B-1)
Es: decimale, binario , ottale, esadecimale
Non posizionali
Il valore di un simbolo non dipende dalla posizione che
esso occupa all’interno della configurazione.
Es: Numeri romani
23
Programmazione - Michele Colajanni, 2003/2004
Interpretazione dei simboli in un
sistema posizionale
Nei sistemi posizionali, i simboli di una configurazione
possono essere interpretati come i coefficienti del
seguente polinomio:
n−1
n −1
V=∑ d i ⋅ Bi
V= ∑ di ⋅ Bi
i =0
Numero intero
i= − m
Numero frazionario
B = base
di = i-esima cifra ∈ [0,…,B-1]
n = numero di cifre della parte intera
m = numero di cifre della parte frazionaria
(La virgola è posta tra le cifre di posizione 0 e –1)
Programmazione - Michele Colajanni, 2003/2004
24
12
Esempio 1: Sistema decimale
Il numero 135.2 decimale può essere rappresentato come
segue :
B = 10
n=3
m=1
base
numero cifre parte intera
numero cifre parte frazionaria
cifra
1
3
5
2
posizione
2
1
0
-1
10 2
10 1
10 0
10 -1
peso
1 • 10 2 + 3 • 101 + 5 •100 + 2 •10-1 = 135.2
Programmazione - Michele Colajanni, 2003/2004
25
Sommario
• Numeri, numerali e basi
• Rappresentazione dei numeri interi positivi
–
–
–
–
Base binaria
Conversioni
Altre basi potenze di 2
Problemi nelle conversioni di base
• Rappresentazione dei numeri interi
• Operazioni aritmetiche
• Rappresentazione dei numeri frazionari
– Numeri in virgola fissa
– Numeri in virgola mobile
Programmazione - Michele Colajanni, 2003/2004
26
13
Rappresentazione dei numeri binari
• La rappresentazione dei numeri usata nei calcolatori è
quella binaria.
• Le cifre binarie prendono il nome di bit (Binary digIT).
• Un numero binario intero è costituito da un vettore di bit.
B = bn-1…b1b0
• Il valore di B è dato da:
bi = {0, 1}
V(B) = bn-1×2n-1 + … + b 1×21 + b0×20
• Un vettore di n bit consente di rappresentare i numeri
naturali nell’intervallo da 0 a 2 n-1.
• Per rappresentare i numeri positivi e negativi si
usano diversi sistemi
27
Programmazione - Michele Colajanni, 2003/2004
Esempio 2: Sistema binario
Valore decimale corrispondente al numero binario 11012 ?
cifra2
1
1
0
1
peso
23
22
21
20
valore
1•8
1•4
0•2
1•1
11012 = 1 • 23 + 1 • 22 + 0 • 21 + 1 • 20 = 1310
Programmazione - Michele Colajanni, 2003/2004
28
14
Da base Decimale a Binaria: Numeri interi
Per ottenere il valore binario di un numero intero codificato nel sistema
decimale si procede utilizzando un metodo iterativo di successive
divisioni per 2.
Il resto delle divisioni fornisce le cifre del numerale binario (a partire dalla
meno significativa)
2610
26
Cifra a destra
(meno significativa) 0
2
13
1
2
6 2
0
26)10 = 11010)2
3 2
1
1
Cifra a sinistra
(più significativa)
29
Programmazione - Michele Colajanni, 2003/2004
Da base Decimale a Binaria: Numeri frazionari
Si separa la parte intera da quella frazionaria, La parte intera si calcola
come nel caso precedente La parte frazionaria si ottiene come segue:
1. Si moltiplica la parte frazionaria per 2
2. Se il numero ottenuto è maggiore di 1, si sottrae 1 e si considera come
prima cifra dopo la virgola un ‘1’.
3. Se invece il numero è nella forma 0,….. ---> la cifra da inserire è uno ‘0’.
4. Si ripete dal passo 1 fino a che il numero di partenza non è zero.
Esempio:
0.625 10 =0.101 2
0.625 * 2 = 1.25 1
=
0.25 * 2 = 0.5 0 =
0.5 * 2 = 1 1=
0
0, 1 0 1
Programmazione - Michele Colajanni, 2003/2004
30
15
Sistemi di numerazione Ottale ed
Esadecimale
Quando per la rappresentazione di un numero si utilizzano molte
cifre binarie può convenire usare altri sistemi di numerazione.
I sistemi ottale ed esadecimale sono utilizzati principalmente per
rappresentare in modo più compatto i numeri binari.
I simboli del sistema Ottale sono 8:
{ 0, 1, 2, 3, 4, 5, 6, 7}
I simboli del sistema Esadecimale sono 16:
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }
Si scelgono basi “potenza di 2” perché le regole di
conversione da/a numero binario sono molto semplici ed
efficienti
Programmazione - Michele Colajanni, 2003/2004
31
Conversioni di base
Binario -> Ottale
Per passare dalla codifica Binaria a quella Ottale, si raggruppano le cifre
binarie a gruppi di 3 (a partire da destra) e le si sostituiscono con una
cifra del sistema ottale.
Esempio : 111 001 0102 = 7128
Ottale -> Binario
Per passare dalla codifica Ottale a quella Binaria, si sostituisce ad ogni
cifra ottale la corrispondente codifica binaria (composta da 3 cifre).
Esempio : 3028 = 011 000 0102
Programmazione - Michele Colajanni, 2003/2004
32
16
Conversioni di base (cont.)
Binario -> Esadecimale
Per passare dal codice Binario a quello Esadecimale, si raggruppano le
cifre a gruppi di 4 (a partire da destra) e le si sostituiscono con una cifra
del sistema esadecimale.
Esempio : 1001 0001 11112 = 91F16
Esadecimale -> Binario
Per passare dal codice Esadecimale a quello Binario, si sostituisce ad
ogni cifra esadecimale la corrispondente configurazione binaria
(composta da 4 cifre).
Esempio : A7F16 =1010 0111 11112
33
Programmazione - Michele Colajanni, 2003/2004
Esempio 1
Codifica del numero 12510 = 11111012
In codice Ottale:
1 111 101
In codice Esadecimale:
1101
111
7D
175
Esempio 2
Decimale
5
12
78
149
Binario
101
1100
1001110
10010101
Programmazione - Michele Colajanni, 2003/2004
Ottale
5
14
116
225
Esadecimale
5
C
4E
95
34
17
Codifica dei primi 16 numeri in quattro
sistemi di numerazione
Decimale
Binario
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dcba
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Ottale
Esadecimale
00
01
02
03
04
05
06
07
10
11
12
13
14
15
16
17
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
35
Programmazione - Michele Colajanni, 2003/2004
Problemi nelle conversioni di base
• Non sempre si può rappresentare un numero in
due basi diverse con un numero finito di cifre.
Esempio: Il numero 0.357 in base 10 non si può rappresentare
finitamente in base 2:
0,357 * 2 = 0,714 (<1) e
0,714 * 2 = 1,428 (>1) e
0,428 * 2 = 0,856 (<1) e
0,856 * 2 = 1,712 (>1) e
0,712 * 2 = 1,424 (>1) e
0,424 * 2 = 0,848 (<1) e
0,848 * 2 = 1,796 (>1) e
0,796 * 2 = 1,592 (>1) e
0,592 * 2 = 1,184 (>1) e
0,184 * 2 = 0,368 (<1) e
….
quindi 0
quindi 1
quindi 0
quindi 1
quindi 1
quindi 0
quindi 1
quindi 1
quindi 1
quindi 0
0.35710 finito ---> 0.0101101110…2
Programmazione - Michele Colajanni, 2003/2004
36
18
Problemi nelle conversioni (cont.)
Esempio 2: Il numero 0.15 in base 10 risulta un
numero periodico in base 2:
0.15 * 2 = 0.30
(<1) e quindi 0
0.30 * 2 = 0.60
(<1) e quindi 0
0.60 * 2 = 1.20
(>1) e quindi 1
0.20 * 2 = 0.40
0.40 * 2 = 0.80
(<1) e quindi 0
(<1) e quindi 0
0.80 * 2 = 1.60
(>1) e quindi 1
0.60 * 2 = 1,20
(>1) e quindi 1
….
0.1510 finito ---> 0.00(1001)2
Programmazione - Michele Colajanni, 2003/2004
37
Problemi nelle conversioni (cont.)
Esercizio 3 (per chi ha coraggio): Il numero 0.14 in
base 10 risulta un numero periodico in base 2.
Determinare la sua rappresentazione binaria.
Programmazione - Michele Colajanni, 2003/2004
38
19
Sommario
• Numeri, numerali e basi
• Rappresentazione dei numeri interi
positivi
• Rappresentazione dei numeri interi
– Modulo e segno
– Complemento a 1
– Complemento a 2
– Eccesso
• Operazioni aritmetiche
Programmazione - Michele Colajanni, 2003/2004
39
Regola per numeri negativi
• Nella rappresentazione binaria di numeri dotati
di segno viene tipicamente usato un bit per
discriminare tra valori positivi e valori
negativi.
• Quindi, per rappresentare gli interi relativi, a
parità di cifre si dimezza l’intervallo dei valori
assoluti rappresentabili
• Def. (MSB): Most significant bit. Dati n bit per la
rappresentazione, MSB è il bit in posizione n-1
(ricordarsi che si conta da 0)
Programmazione - Michele Colajanni, 2003/2004
40
20
Rappresentazione dei numeri interi
• Modulo e segno
– Un numero negativo si ottiene fissando ad 1 il bit più significativo.
– E’ molto simile alla rappresentazione dei numeri decimali.
• Complemento a 1
– Un numero negativo si ottiene invertendo bit a bit il corrispondente
numero positivo.
– E’ semplice ottenere la rappresentazione di un numero negativo.
• Complemento a 2
– Un numero negativo si ottiene invertendo bit a bit il corrispondente
numero positivo, quindi sommando il valore 1.
– Ha un’unica rappresentazione per il valore 0.
– Consente di realizzare circuiti più semplici.
• Eccesso 2 n-1
– I numeri vengono rappresentati come somma fra il numero dato e
una potenza di 2, in modo che risultino positivi.
41
Programmazione - Michele Colajanni, 2003/2004
Modulo e Segno
• In questo rappresentazione al valore assoluto
del numero viene prefisso un bit per indicarne
il segno.
• Il valore 0 di questo bit codifica il segno più e
il valore 1 il segno meno.
Esempio con n=8 cifre:
+5710 = 001110012
segno
-5710 = 101110012
modulo
Programmazione - Michele Colajanni, 2003/2004
42
21
Modulo e Segno (cont.)
• Usando n bit (es. 8) per la codifica, il range di valori
rappresentabili risulta essere : [-2n-1+1, …, +2n-1 -1].
• Con 8 bit [-127, …, +127], perché un bit è usato per il
segno.
• Vi sono due configurazioni per lo zero (non bello!)
00000000
10000000
• Poichè le operazioni vanno eseguite sulla sola parte
di valore assoluto (modulo) la determinazione
dell’overflow è semplice (si vedrà in seguito…)
Programmazione - Michele Colajanni, 2003/2004
43
Modulo e Segno (cont.)
• La rappresentazione è vantaggiosa per la sua semplicità
• L’intervallo dei numeri rappresentati (positivi e negativi) è
simmetrico
• Tuttavia, richiede circuiti complessi per l’esecuzione di
somme algebriche
• Prima di eseguire una somma algebrica tra due operandi
A e B è sempre necessario determinare quale dei due è
maggiore in valore assoluto. P.es., nelle sottrazioni:
– Se A è maggiore di B si esegue la differenza A-B e si assegna al
risultato il segno di A
– Se A è minore di B si esegue la differenza B-A e si assegna al
risultato il segno di B
Programmazione - Michele Colajanni, 2003/2004
44
22
Complemento a 1
• I numerali positivi iniziano per 0, i negativi per 1
• Per cambiare di segno si complementa il numerale
bit a bit (àComplementare = cambiare segno)
• Es., 3 à 0011
-3 à 1011
• Con n bit: [-2n-1+1,…, +2n-1-1]
Es. n=8 à [-127, …, +127],
• È una notazione semi-posizionale perché il MSB non
ha peso 2 n-1, ma ha peso (2n-1+1)
Pesi: (-2n-1+1) 2 n-2 ... 2 1 20
Anche in questo caso vi è una doppia rappresentazione dello 0
Programmazione - Michele Colajanni, 2003/2004
45
Complemento a 1 (cont.)
• Complemento a uno: negazione mediante il
complemento bit a bit del numero in valore assoluto a cui
si aggiunge uno zero.
• Rappresentazione poco utilizzata in pratica
Programmazione - Michele Colajanni, 2003/2004
46
23
Complemento a 1 (cont.)
Esempio
Dati n=4 bit, l’intervallo dei numeri rappresentabili è
[-2n-1+1, +2n-1-1] = [-7, +7].
I numeri positivi si rappresentano come al solito:
510 = 01012
I numeri negativi si rappresentano:
– prendendo il valore assoluto e rappresentandolo come al solito
– aggiungendo un bit 0 a sinistra
– complementando a 1 il numero ottenuto (ovvero sostituendo 0
con 1 e 1 con 0)
-510 à 1012 à 01012 à 10102
(equivalente a -7+2)
Programmazione - Michele Colajanni, 2003/2004
47
Rappresentazione in complemento a 2
Dati n bit per la codifica del numero con segno, la
rappresentazione in complemento a 2 di un numero si
ottiene sommando (sottraendo nel caso di numeri negativi)
a 2n il numero codificato in valore assoluto ed eliminando
l’eventuale bit di posizione n.
- Con tale rappresentazione possono essere codificati i valori compresi
nell’intervallo [-2n-1, 2n-1-1]
- I numeri positivi restano inalterati
-I numeri negativi negativi risultano ottenuti sommando qualche valore
positivo al massimo negativo
METODO OPERATIVO: i numeri negativi sono calcolabili partendo
dal corrispondente valore positivo, invertendo tutti i bit e sommando 1
Programmazione - Michele Colajanni, 2003/2004
48
24
Da complemento a 2 a decimale
Il complemento a 2 è una rappresentazione semi-posizionale
perché in una configurazione binaria di n bit, il bit più
significativo (MSB, in posizione n-1) assume un peso negativo
pari a -2n-1
n−2
n −1
i
d i ∈ [0,1]
V10 =− 2 ⋅ d n−1 + ∑ d i ⋅ 2
i =0
Di conseguenza, i numeri positivi (avendo dn-1=0) codificati in complemento a 2
rimangono inalterati, mentre i numeri negativi risultano ottenuti sommando
qualche valore positivo al massimo negativo (-2n-1)
• 10112 in complemento a 2 equivale a:
10112 = 1·(-23) + 0·22 + 1·21 +1·20 = -8 + 0 + 2 +1 = -510
• 01112 in complemento a 2 equivale a :
01112 = 0·(-23) + 1·22 + 1·21 +1·20 = 0 + 4 + 2 +1 = +710
Programmazione - Michele Colajanni, 2003/2004
49
Complemento a 2
• Complemento a due: negazione mediante
complemento a 1, e somma di 1.
• Notazione non completamente posizionale
Programmazione - Michele Colajanni, 2003/2004
50
25
Complemento a 2 (cont.)
Esempio (Metodo operativo)
Dati n=4 bit, l’intervallo dei numeri rappresentabili è
[-2n-1, +2n-1-1] = [-8, +7].
I numeri positivi si rappresentano come al solito:
510 = 01012
I numeri negativi si rappresentano:
– prendendo il valore assoluto e rappresentandolo come al solito
– aggiungendo tanti bit 0 a sinistra fino a raggiungere n bit
– complementando a 1 il numero ottenuto
– sommando 1
-510 à 1012 à 01012 à 10102 à 10112
Programmazione - Michele Colajanni, 2003/2004
51
Motivazione del metodo operativo
• Il numero –X in complemento a 2 ha la stessa sequenza di
bit del numero 2n-X rappresentato in binario puro:
-74 à 10110110 (complemento a 2)
256-74=182 à 10110110 (binario puro)
• Il metodo operativo rappresenta, invece di –X, proprio 2n-X
• Perché calcolare 2 n-X è più efficiente?
2n-X = (2n -1-X)+1
Questa è una sottrazione molto efficiente
da calcolare perché 2 n-1 è una sequenza
di tutti 1 e quindi (2n-1-X) si ottiene invertendo
tutti i bit della rappresentazione di X (ovvero
complementando a 1 la rappresentazione di X)
A questo punto, per ottenere la rappresentazione
cercata, basta aggiungere il +1 fuori parentesi
Programmazione - Michele Colajanni, 2003/2004
52
26
Proprietà del complemento a 2
• Vi è una sola rappresentazione per lo zero
• Il complemento di una somma algebrica è uguale alla
somma aritmetica dei complementi.
• Operativamente non vi è differenza nell’eseguire somme o
sottrazioni. Quindi, non è necessario individuare il
maggiore (in valore assoluto tra i due operandi) come nel
caso della rappresentazione Modulo-Segno.
• Applicando due volte la regola del complemento a 2 si
ottiene il numero originale:
-510 in complemento a 2 risulta 10112
Applicando nuovamente il complemento a 2 si ottiene il valore
positivo del numero e viceversa
-510 à 10112 à 01002 à 01012 = + 510
Programmazione - Michele Colajanni, 2003/2004
53
Rappresentazione in Eccesso k
• È possibile definire rappresentazioni in eccesso k, dove k
è un numero qualsiasi
• L’eccesso “potenza di 2” è solo un caso particolare, anche
se molto interessante
• Rappresentando un intero m in eccesso k con n bit, si
rappresenta in realtà il numero positivo k+m
• Deve comunque valere: k ≤ 2n
• L’intervallo dei numeri rappresentabili dipende sia da k che
da n:
[-k , 2 n-k-1]
Esempi
n=8, k=127
n=8, k=100
n=8, k=50
[-127,+128]
[-100,+155]
[-50,+205]
Programmazione - Michele Colajanni, 2003/2004
54
27
Rappresentazione in Eccesso 2n-1
• I numeri vengono rappresentati come somma fra il
numero dato e una potenza di 2.
• Con n bit si rappresenta l’eccesso 2 n-1
• Intervallo come complemento a 2: [-2n-1 , +2n-1-1]
• Metodo operativo:
I numerali si ottengono da quelli in complemento a
2 complementando il bit più significativo
Esempio
n=4 bit: eccesso 8, intervallo [-8,+7]
- 310
- 3+8 = 5 : 01012
+410
+4+8 = 12 : 11002
• Intervallo asimmetrico
• Rappresentazione unica dello 0
55
Programmazione - Michele Colajanni, 2003/2004
Rappresentazione in Eccesso 2n-1 (cont.)
• Dato un numero m determinare il numero minimo di cifre
nmin necessarie
• Determinare la prima potenza di 2 superiore al modulo di m
e confrontarla con gli estremi dell’intervallo
Esempio
Convertire (-347)10 in eccesso 2 n-1
• 28 = 256 < 347 < 512 = 2 9
• Intervallo con n bit: [-2n-1 ,+2n-1-1] e pertanto nmin=10
• 512 - 347 = 165
• 165 = 128+32+4+1
9
• (-347)10 in eccesso 2 è:
Programmazione - Michele Colajanni, 2003/2004
512
256
0
0
128
64
32
16
1 0 1
0
8
4
2
1
0 1 0 1
56
28
Confronto tra rappresentazioni
B
b2b1b0
000
001
010
011
100
101
110
111
Modulo e segno
+0
+1
+2
+3
-0
-1
-2
-3
V(B)
Complemento a 1
+0
+1
+2
+3
-3
-2
-1
-0
Complemento a 2
+0
+1
+2
+3
-4
-3
-2
-1
57
Programmazione - Michele Colajanni, 2003/2004
Confronto tra rappresentazioni (cont.)
Decimale
+7
+6
+5
+4
+3
+2
+1
+0
-0
-1
-2
-3
-4
-5
-6
-7
-8
M-S
CP1
CP2
Ecc 8
0111
0110
0101
0100
0011
0010
0001
0000
1000
1001
1010
1011
1100
1101
1110
1111
----
0111
0110
0101
0100
0011
0010
0001
0000
1111
1110
1101
1100
1011
1010
1001
1000
----
0111
0110
0101
0100
0011
0010
0001
0000
----1111
1110
1101
1100
1011
1010
1001
1000
1111
1110
1101
1100
1011
1010
1001
1000
----0111
0110
0101
0100
0011
0010
0001
0000
Programmazione - Michele Colajanni, 2003/2004
58
29
Scarica

Codifica dell`Informazione