Lezione 1
Rappresentazione dei numeri
Aritmetica dei calcolatori
Rappresentazione dei numeri naturali in base 2
Si utilizza un alfabeto binario A = {0,1} dove 0 corrisponde al
numero zero e 1 corrisponde al numero uno
dn-1...d1d0 con di ∈ {0,1}
Il numero rappresentato ? N = dn-1• 2n-1 + .... + d1• 21 + d0• 20
00......0
00......1
00.....10
...
01.....11
10.....00
...
11.....11
=0
=1
=2
= 2n-1 -1
= 2n-1
= 2n - 1
Con sequenze di n bit
sono rappresentabili
2n-1 numeri naturali
Rappresentazione dei numeri naturali in base 2
Ricorda che:
Domanda: Dire se i seguenti numeri naturali
sono rappresentabili usando il numero di bit
specificato
1.
2.
3.
4.
2010 su 5 bit ? SI
6410 su 6 bit ? NO
50010 su 9 bit ? SI
102510 su 10 bit ? NO
20 = 1
21 = 2
22 = 4
23 = 8
24 = 16
25 = 32
26 = 64
27 = 128
28 = 256
29 = 512
210 = 1024
....
Conversione binario - decimale
Esercizio: 11101012 = ???10
1·26 + 1·25 + 1·24 + 0·23 + 1·22 + 0·21 + 1·20 =
64 + 32 + 16 + 0 + 4 + 0 + 1
Soluzione: 11101012 = 11710
Conversione decimale - binario
Esercizio: 10010 = ???2
100 : 2 = 50
50 : 2 = 25
25 : 2 = 12
12 : 2 = 6
6:2=3
3:2=1
1:2=0
resto 0
resto 0
resto 1
resto 0
resto 0
resto 1
resto 1
Soluzione: 10010 = 11001002
Conversione decimale - binario: un procedimento
più pratico
Si scrive il numero decimale come somma di
potenze di 2
Esercizio: 10310 = ???2
103 - 64 = 39
39 - 32 = 7
7-4=3
3-2=1
1-1=0
==>
==>
==>
==>
==>
26
25
22
21
20
Allora 103 = 26 + 25 + 22 + 21 + 20
Soluzione: 10310 = 11001112
Ricorda che:
20 = 1
21 = 2
22 = 4
23 = 8
24 = 16
25 = 32
26 = 64
27 = 128
28 = 256
29 = 512
210 = 1024
....
Tre basi importanti : 2, 8, 16
Nel calcolatore i numeri sono rappresentati in base 2, ma sono
importanti anche le basi 8 e 16.
Infatti, la facilità di conversione
binario-ottale
binario-esadecimale
consente di esprimere i numeri memorizzati nel calcolatore in
forma più sintetica e comprensibile.
Conversione binario - ottale
Esercizio: 101011112 = ???8
10
2
101 111
5
7
3
5
Soluzione: 101011112 = 2578
Esercizio: 6358 = ???2
6
110 011 101
Soluzione: 6358 = 1100111012
La base 16
Quali dei seguenti sono numeri esadecimali validi?
BED
CAR
938
DEAD
BEBE
A129
ACI
DECADE
BAG
DAD
4H3
Conversione binario - esadecimale
Esercizio: 1011111011012 = ???16
Ricorda che:
1011 1110
B
1101
E
D
Soluzione: 1011111011012 = BED16 = 305310
Esercizio: A3C916 = ???2
A
3
C
1010 0011 1100
9
110 = 116 = 00012
210 = 216 = 00102
......
910 = 916 = 10012
1010 = A16 = 10102
1110 = B16 = 10112
1210 = C16 = 11002
1310 = D16 = 11012
1410 = E16 = 11102
1510 = F16 = 11112
1001
Soluzione: A3C916 = 10100011110010012 = 4192910
Conversioni di base
Esercizio: Considerare il numero 715FBFFA16
1. Quale numero binario rappresenta?
7
1
5
F
B
F
F
A
0111 0001 0101 1111 1011 1111 1111 1010
2. Quale numero ottale rappresenta?
01 110 001 010 111 111 011 111 111 111 010
1
6 1 2 7 7 3 7 7 7 2
3. Quale numero decimale rappresenta?
10 • 160 + 15 • 161 + 15 • 162 + 11 • 163 + 15 • 164 +
+ 5 • 165 + 1 • 166 + 7 • 167
Rappresentazione dei numeri interi
in complemento a due
Come si riconosce un numero positivo da uno negativo?
Positivo --> bit più significativo 0
Negativo --> bit più significativo 1
Su n bit sono rappresentabili 2n numeri unsigned (0...2n-1)
0.......00 = 0
0.......01 = 1
...
01......11 = 2n-1-1 (massimo)
10......00 = 2n-1 (minimo)
...
11......11 = 2n - 1
Dato N>0, il numero -N si rappresenta su n bit con il numero 2n - N
-1 ==> 2n - 1
(1........1)
-2n-1 ==> 2n - 2n-1 = 2n-1 (10......0)
Complemento a due: rappresentazione
dei numeri negativi
Esercizio: rappresentare -3510 in complemento a due
001000112 = +3510
Complemento a uno
11011100 +
1 =
-----------11011101
Soluzione: -3510 = 110111012
Complemento a due: rappresentazione
dei numeri negativi
Esercizio: rappresentare -3510 in complemento a due
Algoritmo alternativo: invertire tutti i bit a sinistra del bit “1”
meno significativo
001000112 = +3510
110111012
Complemento a due: rappresentazione
dei numeri negativi
Esercizio: Quale numero decimale rappresenta il seguente numero
binario in complemento a due?
1111 1111 1111 1111 1111 1110 0000 11002
0000 0000 0000 0000 0000 0001 1111 01002 =
22 + 24 + 25 + 26 + 27 + 28 = 50010
Soluzione: poichè il segno originale “1”, cioè negativo, si ha
1111 1111 1111 1111 1111 1110 0000 11002 = -50010
Complemento a due: somma e sottrazione
Esercizio: eseguire 5310 - 3510 in complemento a due su 8 bit
5310 3510 =
-------==>
1810
11111101
5310 +
001101012 +
(-35)10 =
110111012 =
--------==> -----------1810
(1000100102) mod 28
000100102= 1810
ATTENZIONE: ricordare di effettuare l’operazione di modulo
Complemento a due: somma e sottrazione
Esercizio: eseguire 1510 - 3810 in complemento a due su 8 bit
1510 3810 =
-------==>
- 2310
00011110
1510 +
000011112 +
(-38)10 =
110110102 =
--------==> --------------------- 2310
(0111010012) mod 28
111010012
000101112 = 2310
Complemento a due: overflow
In quali dei seguenti casi si può ottenere overflow:
1. somma di due numeri con segno concorde?
2. somma di due numeri con segno discorde?
3. sottrazione di due numeri con segno concorde?
4. sottrazione di due numeri con segno discorde?
SI
NO
NO
SI
Regola per verificare la presenza di overflow:
OVERFLOW
==> ultimi due riporti discordi
NO OVERFLOW ==> ultimi due riporti concordi
Esercizio
Considerate i numeri esadecimali x1 = 7A, x2 = 13, x3 = FF,
x4 = C1, x5 = 84
1. Scrivere i quattro numeri in codice binario a 8 bit
x1 = 0111 1010 x2 = 0001 0011 x3 = 1111 1111
x4 = 1100 0001 x5 = 1000 0100
2. Interpretare il codice binario in complemento a due ed
eseguire le operazioni x1- x2 ; x3 + x4 ; x4 + x5 ; x4 - x1
11111000
01111010 +
x1
11101101 =
-x2
-----------(101100111) mod 28 = 01100111
overflow?
Esercizio (continua)
11111111
11111111 +
x3
11000001 =
x4
-----------(111000000) mod 28 = 11000000
overflow?
10000000
11000001 +
x4
10000100 =
x5
-----------(101000101) mod 28 = 01000101
overflow?
10000000
11000001 +
x4
10000110 =
-x1
-----------(101000111) mod 28 = 01000111
overflow?
Rappresentazione dei numeri razionali
in virgola fissa
Data una base B, si assegnano:
" n cifre per rappresentare la parte intera
" m cifre per rappresentare la parte frazionaria
dn-1...d1d0 . d-1...d-m
Il numero rappresentato ?
N = dn-1• Bn-1 + .... + d1• B1 + d0• B0 + d-1• B-1 + ... + d-m• B-m
Per B=2 la rappresentazione dei numeri razionali in virgola
fissa prevede l’uso di n+m bit
n
m
Rappresentazione dei numeri razionali
in virgola fissa
Esercizio: 23.62510 = ???2
(usare la rappresentazione in virgola fissa con n=8, m=8)
Conversione della parte intera:
23 : 2 = 11
resto 1
11 : 2 = 5
resto 1
5:2 =2
resto 1
2:2 =1
resto 0
1:2 =0
resto 1
"
Coversione della parte frazionaria:
0.625 x 2 = 1.25
parte intera 1
0.25 x 2 = 0.50
parte intera 0
0.50 x 2 = 1
parte intera 1
"
Soluzione: 23.62510 = 00010111.101000002
Rappresentazione dei numeri razionali
in virgola mobile (floating point)
Un numero reale R può essere scritto come R = ±m•Be
m = mantissa
e = caratteristica
B = base
Esempi: B = 10
R1 = 3.1569 x 103
R2 = 2054.00035 x 10-6
R3 = 0.1635 x 102
R4 = 0.0091 x 10-12
"
notazione scientifica: m = 0 . d-1...d-k
notazione scientifica normalizzata: m = d0 . d-1...d-k
con d0 ≠ 0
Rappresentazione dei numeri razionali
in virgola mobile (floating point)
Rappresentando mantissa ed esponente in binario si ottengono
numeri del tipo ±1. ss....s • 2yy...y
Si osservi che:
"
Spostare la virgola a destra di n bit significa decrementare di n
l’esponente
es:
0.01 • 211 = 1.0 • 21
Infatti 1 ¼• 2-2 • 23
= 1 • 21
"
Spostare la virgola a sinistra di n bit significa incrementare di n
l’esponente
es:
100.011 • 211 = 1.00011 • 2101
Infatti (1• 22 + 1• 2-2 + 1• 2-3) • 23 = (1• 20 + 1• 2-4 + 1• 2-5) • 25
25 + 21 + 20
=
25 + 21 + 20
Rappresentazione dei numeri razionali
in virgola mobile (floating point)
Esercizio: 1010 = ???2 f.p.
1010 = 10102 = 1010.02 • 20 = 1.01 • 23
Esercizio: 151.2510 = ???2 f.p.
15110 = 128 + 16 + 4 + 2 + 1 = 100101112
0.2510 x 2 = 0.5010 parte intera 0
0.5010 x 2 = 110
parte intera 1
0.2510 = 0.012
Quindi = 151.2510 = 10010111.012 = 1.0010111012 • 27
Rappresentazione dei numeri razionali
in virgola mobile (floating point)
Una volta fissato il numero di bit totale per la rappresentazione dei
numeri razionali rimane da decidere
quanti bit assegnare per la mantissa ?
(maggiore ? il numero di bit e maggiore ? l’accuratezza con cui
si riescono a rappresentare i numeri)
"
quanti bit assegnare per l’esponente ?
(aumentando i bit si aumenta l’intervallo dei numeri rappresentabili)
"
OVERFLOW: si ha quando l’esponente positivo ? troppo grande
per poter essere rappresentato con il numero di bit
assegnato all’esponente
UNDERFLOW: si ha quando l’esponente negativo ? troppo grande
per poter essere rappresentato con il numero di bit
assegnato all’esponente
Rappresentazione dei numeri razionali
in virgola mobile (floating point)
"
Standard IEEE754: Singola precisione (32 bit)
si riescono a rappresentare numeri 2.010 • 2-38 ÷ 2.010 • 238
"
Standard IEEE754: Doppia precisione (64 bit)
si riescono a rappresentare numeri 2.010 • 2-308 ÷ 2.010 • 2308
Esercizio
Supponiamo di contare in binario usando le dita delle mani:
Dito esteso = 1
Dito chiuso = 0
Consideriamo il pollice come bit meno significativo e il
mignolo come bit più significativo.
1. Come si rappresentano i numeri 6, 17, 31?
2. Fino a che numero si riesce a contare usando entrambe
le mani? [210 -1]
3. E ... usando anche i piedi? [220 -1]
4. Considerate il mignolo del piede sinistro come bit di segno
della rappresentazione in complemento a due.
Quale range di numeri si riesce a rappresentare?
[-219....+(219-1)]