Sei sulla pagina 1di 32

Algoritmi di conversione

Rappresentazione ottale e
esadecimale
25 settembre 2020
Notazione binaria per numeri naturali
In base 2.
I simboli ammessi sono 0,1.
Una sequenza / stringa di 0 e 1, di lunghezza n

an-1 an-2 …a1 a0

con ai  {0, 1} per i = 0, 1, …, n-1


rappresenta l’intero N:

N = (an-1 an-2 … a1 a0 )2 =

= an-1  2n-1 + an-2 2n-2 + … + a1 21 + a0 20

n −1
N =  ai 2
In notazione compatta: i
i =0
Notazione posizionale (in base b generica)
In base b.
I simboli ammessi sono 0,1, … , b-1.
Una sequenza / stringa di 0, 1, … , b-1, di lunghezza n

an-1 an-2 …a1 a0

con ai  {0, 1, … , b-1} per i = 0, 1, …, n-1


rappresenta l’intero N:

N = (an-1 an-2 … a1 a0 )b =

= an-1  bn-1 + an-2 bn-2 + … + a1 b1 + a0 b0

n −1
In notazione compatta: N =  ai bi
i =0
Esempi

(234)10 2  102 + 3  10 + 4 = 23410


(234)8 2  82 + 3  8 + 4 = 15610

(234)16 2  162 + 3  16 + 4 = 56410

(101)10 1  102 + 0  10 + 1 = 10110


(101)8 1  82 + 0  8 + 1 = 6510

(101)2 1  22 + 0  2 + 1 = 510
Algoritmi di conversione
Problema della conversione da binario a decimale
Dati: n bit an-1, an-2, … , a1, a0
Risultato: l’intero N tale che N = (an-1 an-2…a1a0)2

Algoritmo = procedimento di calcolo che risolve il


problema con una sequenza finita di passi elementari

Problema della conversione da decimale a binario


Dati: un intero N
Risultato: n bit an-1, an-2 , … , a1, a0 tali che
N = (an-1 an-2…a1a0)2
Algoritmi di conversione binario decimale

• Da binario a decimale: moltiplico ogni cifra per


l’opportuna potenza di 2 e poi sommo

• Da decimale a binario: esprimo il numero come somma


di potenze di 2, partendo dalla più grande potenza di 2
minore o uguale del numero

Esistono altri «algoritmi» per convertire un numero dalla


rappresentazione binaria alla decimale e viceversa.
Bisogna conoscere più metodi di soluzione! Per scegliere il
più adatto, veloce, …. Mai accontentarsi!
Verso un algoritmo di conversione da b=2
N = (an-1 an-2…a1a0)2

N = an-12n-1+ an-22n-2+ …+ a12+ a0

= (an-12n-2+ an-22n-3+ …+ a22 + a1) 2 + a0 S0 = S1 2 + a0

= ( (an-12n-3+ an-12n-4+ …+ a2) 2 + a1) 2 + a0 S1 = S2 2 + a1

….. S2 = S3 2 + a2
….. …..

= ((… (an-12+ an-2) 2 + … + a2) 2 + a1)2 + a0 Sn-2 = Sn-1 2 + an-2

= ((… ( (an-1) 2+ an-2) 2 + … + a2) 2 + a1)2 + a0 Sn-1 = an-1


Algoritmo di conversione: binario in decimale
MSD=cifra più significativa
LSD=cifra meno significativa
Dati: an-1 , an-2 , …, a1 , a0 con ai = 0 o 1
Risultato: N = (an-1 an-2…a1a0)2

N = ((… ( ( an-1) 2+ an-2) 2 + … + a2) 2 + a1)2 + a0

N= S0 = S1 2 + a0 Sn-1 = an-1
S1 = S2 2 + a1 Sn-2 = an-2 + 2Sn-1
Dal Sn-3 = an-3 + 2Sn-2
S2 = S3 2 + a2 basso
verso …..
….. l’alto:
da an-1 Si = ai + 2Si+1
Sn-2 = Sn-1 2 + an-2 a a0 ; …..
da MSD S0 =N
S0 = a0+2S1
Sn-1 = an-1 a LSD
Sn-1 = an-1
Esempio 1
Sn-2 = an-2+2Sn-1 N = (a7 a6 a5 a4 a3 a2 a1a0)2 n=8
Sn-3 = an-3+2Sn-2
….. (1 0 1 1 0 1 0 1)2
Si = ai+2Si+1
S7 = a7 = 1
….. S6 = a6+2S7 = 0 + 2 = 2
S0 =N S5 = a5+2S6 = 1 + 4 = 5
S4 = a4+2S5 = 1 + 10 = 11
S3 = a3+2S4 = 0 + 22 = 22
S2 = a2+2S3 = 1 + 44 = 45
S1 = a1+2S2 = 0 + 90 = 90
S0 = a0+2S1 = 1 + 180 = 181
Esempio 4

(10011000)2

n=8 S7 = a7 = 1
S6 = a6+2S7 = 0 + 2 = 2
S5 = a5+2S6 = 0 + 4 = 4
S4 = a4+2S5 = 1 + 8 = 9
S3 = a3+2S4 = 1 + 18 = 19
S2 = a2+2S3 = 0 + 38 = 38
S1 = a1+2S2 = 0 + 76 = 76
S0 = a0+2S1 = 0 + 152 = 152
Algoritmo di conversione: decimale in binario
N = (an-1 an-2…a1a0 )2
Dato: N. Risultato: an-1 , an-2 , …, a1 , a0 con ai = 0 o 1
Procedura inversa: dall’alto verso il basso da a0 ad an-1;
da LSD a MSD
N= S0 = S1 2 +a0 a0 ed S1 sono rispettivamente il resto e il
quoziente della divisione di N= S0 per 2.
S1 = S2 2 + a1
S2 = S3 2 + a2 ….
……
Si = Si+1 2 + ai ai ed Si+1 sono rispettivamente il resto e
il quoziente della divisione di Si per 2.
…… ….
Sn-2 = Sn-1 2 + an-2 Fino ad ottenere un Si =0.
Sn-1 = an-1 Algoritmo delle divisioni successive
Esempio 1 (decimale in binario)
N=152
S0 = N = a0+2 S1
N = (an-1 an-2…a1a0)2
S1 = a1 + 2 S2
S2 = a2 + 2 S3 S0 = a0+2S1 = 0 + 276 = 152 152 : 2 = 76 con resto 0
….. S1 = a1+2S2 = 0 + 2  38 = 76 76 : 2 = 38 con resto 0
Si = ai + 2 Si+1 S2 = a2+2S3 = 0 + 2  19 = 38 38 : 2 = 19 con resto 0
S3 = a3+2S4 = 1 + 2  9 = 19 19 : 2 = 9 con resto 1
…..
Sn-1 = an-1 S4 = a4+2S5 = 1 + 2  4 = 9 9 : 2 = 4 con resto 1
S5 = a5+2S6 = 0 + 2  2 = 4 4 : 2 = 2 con resto 0
S6 = a6+2S7 = 0 + 2  1 = 2 2 : 2 = 1 con resto 0

S7 = a7+2S8 = 1 + 2  0 =1 1 : 2 = 0 con resto 1

STOP
N = (10011000)2
Algoritmi di conversione binario decimale

• Da binario a decimale:
1. moltiplico ogni cifra per l’opportuna potenza di 2 e poi
sommo (definizione)
2. Considero i bit dal MSD (da sinistra a destra), partendo
da zero, raddoppio e sommo il prossimo bit

• Da decimale a binario:
1. esprimo il numero come somma di potenze di 2,
partendo dalla più grande potenza di 2 minore o
uguale del numero
2. Divisioni successive per 2: i resti forniscono i bit dal
LSD, riapplico ai quozienti
Conversione da decimale a base B
Altre basi importanti
Nel sistema posizionale pesato abbiamo
visto le rappresentazioni in base 2 e 10 e le
relative conversioni.
Altre basi importanti (per l’informatica
almeno) sono 8 e 16.
Notazione in base 8 / ottale
In base 8.
I simboli ammessi sono 0,1, … , 7.
Una sequenza / stringa di 0, 1, … , 7, di lunghezza n

an-1 an-2 …a1 a0


con ai  {0, 1, … , 7} per i = 0, 1, …, n-1
rappresenta l’intero N:

N = (an-1 an-2 … a1 a0 )8 =

= an-1  8n-1 + an-2 8n-2 + … + a1 81 + a0 80

n −1

In notazione compatta: N =  ai 8i
i =0
Esempi

(234)8 2  82 + 3  8 + 4 = 15610

(101)8 1  82 + 0  8 + 1 = 6510
Un po’ di magia
b=8 rappresentazione ottale
( 213)8 = 2  82 + 1  8 + 3 = 139
Valore 0 000
010 001 011 identico 1 001
2 010
3 011
4 100
27+23+21+20=
Convertiamolo 5 101
in decimale =128+8+2+1 = 139 6 110
7 111

Sarà un caso?
Non è un caso!
010001011=

= (0  28+ 1  27+ 0  26)+ (0  25+ 0  24+ 123)+(0  22 + 12+ 1) =

= (0  22+ 1  21+ 0)  26 + (0  22+ 0  21+ 1) 23 +(0  22 + 12+ 1) =

= 2  26 + 1  23 + 3  20 =
= 2  82 + 1  81 + 3  80 = ( 2 1 3) 8
Da binario a ottale

N = (a7 a6…a1a0)2 = a7 27+ a6 26 + …+ a12+ a0

= (a7  27+ a6  26)+ (a5  25+ a4  24+ a3 23)+(a2  22 + a1  2+ a0) =


= (a7  21+ a6 )  26 + (a5  22+ a4  21+ a3 ) 23 +(a2  22 + a1  2+ a0) =

= b2  82 + b1  81 + b0  80
E inoltre b2 , b1 , b0 sono compresi fra 0 e 7.
Da binario ad ottale e viceversa
Da binario ad ottale:
• Raggruppa i bit 3 a 3 da destra
• Ad ogni gruppo fai corrispondere la cifra in ottale (da 0 a 7)

Da ottale a binario:
• Ad ogni cifra in ottale far corrispondere la
rappresentazione binaria su 3 bit e concatenare

Esempi:
Notazione in base 16 / esadecimale
In base 16.
I simboli ammessi sono 0,1, … , 9, A, B, C, D, E, F.
Una sequenza / stringa di 0, 1, … , F, di lunghezza n

an-1 an-2 …a1 a0

con ai  {0, 1, … , F} per i = 0, 1, …, n-1


rappresenta l’intero N:
N = (an-1 an-2 … a1 a0 )16 =
= an-1  16n-1 + an-2 16n-2 + … + a1 161 + a0 160
n −1
In notazione compatta: N =  ai 16i
i =0

A volte (per es. in [PH]) è usato il prefisso 0x davanti la stringa. Esempio: 0x8A00C
Ancora magia!

b = 16 rappresentazione esadecimale

( 203)16 = 2  162 + 3 = 515

0010 0000 0011

29 + 21 + 20 = 515

A voi la dimostrazione formale!


Nemmeno questo è un caso!
Da binario a esadecimale e viceversa
Da binario ad esadecimale:
• Raggruppa i bit 4 a 4 da destra
• Ad ogni gruppo fai corrispondere la cifra in esadecimale (da
0 a F)
Da esadecimale a binario:
• Ad ogni cifra in esadecimale far corrispondere la
rappresentazione binaria su 4 bit e concatenare

Esempi:
Esercizi
• Quanti bit sono necessari per rappresentare
18?
• Quanti bit sono necessari per rappresentare
152?
• Quanti bit sono necessari per rappresentare
un intero n?
Numero di bit per rappresentare N
E’ possibile prevedere il numero di bit necessari per rappresentare N in binario?
Potevamo prevedere che per rappresentare N = 152 occorrevano 8 bit?
E’ possibile rappresentare 152 con 7 bit?
No , perché con 7 bit possiamo rappresentare tutti e soli gli interi da 0 a 27 - 1=127

E’ possibile rappresentare 152 con 8 bit?


Si, perché con 8 bit possiamo rappresentare tutti gli interi da 0 a 28 - 1 = 255
In effetti: 27-1< 152 ≤ 28-1, ovvero 27 ≤ 152 < 28.

Più precisamente 152 = 27,248. Ci serve risalire a 7,248 da 152. Come fare?
7,248 = log 2 152 .

Il minimo numero di bit necessari a rappresentare N in binario lo ottengo


considerando log 2 N, tralasciando la parte decimale, e sommando 1.

Nota: 152 si può rappresentare anche con 9, 10, 11, ….. bit:
(152)10 = (10011000)2 = (010011000)2 = (0010011000)2 = (00010011000)2
Esercizi
• Da cosa sono caratterizzati i numeri pari in binario?
(11010)2 è pari?

Dimostrare nel modo più formale, preciso e convincente


la vostra affermazione.

• Da cosa sono caratterizzati i numeri multipli di 4 in binario?


(11010)2 è multiplo di 4?

Dimostrare nel modo più formale, preciso e convincente


la vostra affermazione.
Riepilogo
• Rappresentazione nelle basi 2, 8, 10 e 16 e
conversioni [P] parr. 1.5, 1.3.2
• Iscrivetevi alla piattaforma
• Svolgete gli esercizi indicati nelle slides e sulla
piattaforma.

Potrebbero piacerti anche