Numeri binari Conversioni numeriche: decimali-binario Operazioni … · 2012-11-26 · Arch. Elab....
Transcript of Numeri binari Conversioni numeriche: decimali-binario Operazioni … · 2012-11-26 · Arch. Elab....
Arch. Elab. - S. Orlando 1
Numeri binari Conversioni numeriche: decimali-binario Operazioni algebriche con numeri binari
Russo ing. Saverio
Arch. Elab. - S. Orlando 2
Il trionfo dello ZERO
C’era una volta un povero zero
tondo come un O, tanto buono ma però contava proprio zero
e nessuno lo voleva in compagnia per non buttarsi via. Una volta per caso
trovò il numero Uno di cattivo umore perché non riusciva a contare
fino a tre. Vedendolo così nero
il piccolo zero si fece coraggio,
sulla sua macchina gli offerse un passaggio, e schiacciò l’acceleratore,
fiero assai dell’onore di avere a bordo
un simile personaggio. D’un tratto chi si vede fermo sul marciapiede?
il signor tre che si leva il cappello e fa un inchino fino al tombino
e poi, per Giove, il sette, l’otto, il nove
che fanno lo stesso.
Ma che cosa è successo?
che l’uno e lo zero seduti vicini,
uno qua l’altro là formavano un gran dieci: nientemeno, un’autorità! Da quel giorno lo zero
fu molto rispettato, anzi da tutti i numeri
ricercato e corteggiato: gli cedevano la destra con zelo e premura, (di tenerlo a sinistra
avevano paura), lo invitavano a cena,
gli pagavano il cinema, per il piccolo zero
fu la felicità.
Gianni Rodari
Il trionfo dello ZERO
Arch. Elab. - S. Orlando 3
Lo Zero, usato a volte come sinonimo di Niente, è in realtà un numero speciale che merita un’attenzione particolare. E’ quella cifra, apparentemente innocua, che nasconde poteri insospettati! Separa i numeri positivi (+) e quelli negativi (–), se si trova a destra delle altre cifre ne amplifica il valore (10000… verso l’infinitamente grande), se sta alla loro sinistra le riduce con altrettanta potenza (0,00001… verso l’infinitamente piccolo). Pare che il simbolo grafico "O" derivi dalla traccia, lasciata sul terreno, una volta tolto l’oggetto che rappresentava un numero (il numero che non c’è più).
Arch. Elab. - S. Orlando 4
Tabella di conversione
D b3 b2 b1 b0 O H 0 0 0 0 0 0 0 1 0 0 0 1 1 1 2 0 0 1 0 2 2 3 0 0 1 1 3 3 4 0 1 0 0 4 4 5 0 1 0 1 5 5 6 0 1 1 0 6 6 7 0 1 1 1 7 7 8 1 0 0 0 - 8 9 1 0 0 1 - 9
10 1 0 1 0 - A 11 1 0 1 1 - B 12 1 1 0 0 - C 13 1 1 0 1 - D 14 1 1 1 0 - E 15 1 1 1 1 - F
D DECIMALE B BINARIO O OTTALE
H ESADECIMALE
Arch. Elab. - S. Orlando 5
Interi unsigned 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 di ∈ {0,1}
• Qual è il numero rappresentato ?
• Quanti numeri sono rappresentabili su n bit?
N = dn-1• 2n-1 + .... + d1• 21 + d0• 20
Con sequenze di n bit sono rappresentabili 2n numeri naturali (da 0 a 2n-1)
00….00 = 0 00….01 = 1 00….10 = 2 … 01….11 = 2n- 3 10….00 = 2n- 2 … 11….11 = 2n - 1 100….00 = 2n
Arch. Elab. - S. Orlando 6
Interi unsigned in base 2
• I seguenti numeri naturali sono rappresentabili usando il numero di bit specificato ?
• 2010 su 5 bit ? • 6410 su 6 bit ? • 50010 su 9 bit ? • 102510 su 10 bit ?
SI
SI NO
NO
Ricorda che: 20 = 1 21 = 2 22 = 4 23 = 8 24 = 16 25 = 32 26 = 64 27 = 128 28 = 256 29 = 512 210 = 1024 ....
Arch. Elab. - S. Orlando 7
Peso dei numeri binari
0000 0001 = 1 2^0 0,1000 0000 = 0,5 2^- 2 0000 0010 = 2 2^1 0,0100 0000 = 0,25 2^- 4 0000 0100 = 4 2^2 0,0010 0000 = 0,125 2^- 8 0000 1000 = 8 2^3 0,0001 0000 = 0,0625 2^- 16 0001 0000 = 16 2^4 0,0000 1000 = 0,03125 2^- 32 0010 0000 = 32 2^5 0,0000 0100 = 0,015625 2^- 64 0100 0000 = 64 2^6 0,0000 0010 = 0,0078125 2^- 128 1000 0000 = 128 2^7 0,0000 0001 = 0,00390625 2^- 256
Arch. Elab. - S. Orlando 8
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
Arch. Elab. - S. Orlando 9
Conversione decimale-binario
• Esercizio: 10010 = ???2
100 : 2 = 50 resto 0 50 : 2 = 25 resto 0 25 : 2 = 12 resto 1 12 : 2 = 6 resto 0 6 : 2 = 3 resto 0 3 : 2 = 1 resto 1 1 : 2 = 0 resto 1
Soluzione: 10010 = 11001002
Arch. Elab. - S. Orlando 10
Conversione dec-bin: metodo più pratico
• Scriviamo direttamente il numero decimale come somma di potenze di 2 • Per far questo, sottraiamo via via le potenze di 2, a partire dalle più
significative
• Esercizio: 10310 = ???2
Ricorda che: 20 = 1 21 = 2 22 = 4 23 = 8 24 = 16 25 = 32 26 = 64 27 = 128 28 = 256 29 = 512 210 = 1024 ....
103 - 64 = 39 ==> 26
39 - 32 = 7 ==> 25 7 - 4 = 3 ==> 22 3 - 2 = 1 ==> 21 1 - 1 = 0 ==> 20
Allora 10310 = 26 + 25 + 22 + 21 + 20
Soluzione: 10310 = 11001112
Arch. Elab. - S. Orlando 11
Conversione binario-ottale e viceversa
• Esercizio: 101011112 = ???8
• Esercizio: 6358 = ???2
10 101 111 2 5 7
Soluzione: 101011112 = 2578
6 3 5 110 011 101
Soluzione: 6358 = 1100111018
Arch. Elab. - S. Orlando 12
Conversione binario-esadecimale e viceversa
• Esercizio: 1011111011012 = ???16
• Esercizio: A3C916 = ???2
Ricorda che: 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
1011 1110 1101
B E D
A 3 C 9 1010 0011 1100 1001
Soluzione: 1011111011012 = BED16 = 305310
Soluzione: A3C916 = 10100011110010012 = 4192910
Arch. Elab. - S. Orlando 13
Possiamo introdurre le operazioni di somma, sottrazione, prodotto e divisione tra numeri in binario. Introduciamo a tale scopo la:
Addizione
0+0=0 0+1=1 1+0=1 1+1=0 con riporto di 1
Sottrazione
0−0=0 0−1=1 prestito di 1 1−0=1 1−1=0
Prodotto
0·0=0 0·1=0 1·0=0 1·1=1
Divisione
0:0 non definita 0:1=0 1:0 non definita 1:1=1
Arch. Elab. - S. Orlando 14
Interi signed in complemento a 2
• 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 interi unsigned (da 0 a 2n-1) • Sempre su n bit, quanti interi signed in complemento a 2 ?
0.......00 = 0 0.......01 = 1 ... 01......11 = 2n-1-1 (massimo) 10......00 = 2n-1 (minimo) - 2n-1 = 2n-1 - 2n ... 11......11 = 2n - 1 -1 = 2n - 1 - 2n
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)
Arch. Elab. - S. Orlando 15
Complemento a 2
• Esercizio: Rappresentare -3510 in complemento a 2
001000112 = +3510 11011100 + 1 = ------------ 11011101
Complemento a uno
Soluzione: -3510 = 110111012
Arch. Elab. - S. Orlando 16
Complemento a 2
• Esercizio: Rappresentare -35 in complemento a 2
001000112 = +3510 110111012
Inverti (complementa a 1) tutti i bit a sinistra del bit “1” meno significativo
Arch. Elab. - S. Orlando 17
Complemento a 2
• 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: il numero è -50010
Arch. Elab. - S. Orlando 18
Complemento a 2: somma e sottrazione
• Esercizio: eseguire 5310 - 3510 in complemento a due su 8 bit
3510 = 001000112 complementando: - 3510 = 110111012 11111101 5310 - 5310 + 001101012 + 3510 = (-35)10 = 110111012 = _______ ⇒ _________ ⇒________ 1810 1810 (1000100102) mod 28
000100102 = 1810 110111012 = 22110
Arch. Elab. - S. Orlando 19
Complemento a 2: somma e sottrazione
• Esercizio: eseguire 1510 - 3810 in complemento a due su 8 bit
3810 = 001001102 complementando: - 3810 = 110110102 00011110 1510 - 1510 + 000011112 + 3810 = (-38)10 = 110110102 = _______ ⇒ _________ ⇒________ -2310 -2310 (0111010012) mod 28
110110102 = 21810 000101112 = 2310
Arch. Elab. - S. Orlando 20
Overflow
• In quali dei seguenti casi si può ottenere overflow? – somma di due numeri con segno concorde? – somma di due numeri con segno discorde? – sottrazione di due numeri con segno concorde? – sottrazione di due numeri con segno discorde?
SI
NO NO
SI
Arch. Elab. - S. Orlando 21
Esercizio
• Considerate i numeri esadecimali x1 = 7A x2 = 13 x3 = FF x4 = C1 x5 = 84
• Scrivere i quattro numeri in codice binario a 8 bit
• Interpretare il codice binario in complemento a due ed eseguire le operazioni x1- x2; x3 + x4; x4 + x5; x4 - x1
x1 = 0111 1010 x2 = 0001 0011 x3 = 1111 1111
x4 = 1100 0001 x5 = 1000 0100
11111000 x1 01111010 + -x2 11101101 = _____________ (101100111) mod 28 = 01100111 overflow?
Arch. Elab. - S. Orlando 22
Esercizio (continua)
11111111 x3 11111111 + x4 11000001 = ___________ (111000000) mod 28 = 11000000 overflow?
10000000 x4 11000001 + x5 10000100 = ___________ (101000101) mod 28 = 01000101 overflow?
10000000 x4 11000001 + -x1 10000110 = ___________ (101000111) mod 28 = 01000111 overflow?
Arch. Elab. - S. Orlando 23
Sottrazione con complemento a 2
Arch. Elab. - S. Orlando 24
Moltiplicazione di numeri binari
Arch. Elab. - S. Orlando 25
Divisione di numeri binari
Arch. Elab. - S. Orlando 26
Numeri con la virgola (virgola fissa)
Data una base B, si assegnano: n cifre per rappresentare la parte intera m cifre per rappresentare la parte frazionaria In base B=2, abbiamo quindi m+n bit per parte intera e frazionazia m n Esempio: dn-1...d1d0 . d-1...d-m
Qual è il numero rappresentato in base B?
N = dn-1• Bn-1 + .... + d1• B1 + d0• B0 + d-1• B-1 + ... + d-m• B-m
Arch. Elab. - S. Orlando 27
Virgola fissa
Esercizio: 23.62510 = ???2 (usare la rappresentazione in virgola fissa con n=8, m=8)
Conversione 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
Conversione 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
Arch. Elab. - S. Orlando 28
Numeri con virgola mobile
• Un numero reale R può essere scritto in base B come R = ± m • Be m = mantissa e = esponente B = base
• Esempi con 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
Arch. Elab. - S. Orlando 29
Numeri binari in virgola mobile Rappresentando mantissa ed esponente in binario in notazione scientifica normalizzata si ottengono numeri del tipo: ±1. ss....s • 2yy...y
Si osservi che: Spostare la virgola (punto) a destra di n bit significa decrementare di n l’esponente es: 0.01 • 23 = 1.0 • 21 Infatti 1 • 2-2 • 23 = 1 • 21
Spostare la virgola (punto) a sinistra di n bit significa incrementare di n l’esponente es: 100.011 • 23 = 1.00011 • 25 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
Arch. Elab. - S. Orlando 30
Numeri FP
• Esercizio: 1010 = ???2 FP
• Esercizio: 151.2510 = ???2 FP
1010 = 10102 = 1010.02 • 20 = 1.01 • 23
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
Arch. Elab. - S. Orlando 31
Numeri FP
Una volta fissato il numero di bit totali 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 (in valore assoluto) per poter essere rappresentato con il numero di bit assegnato all’esponente
Arch. Elab. - S. Orlando 32
Numeri reali
• Rappresentazione di un insieme continuo • Fissata una base b, un numero x è rappresentato dalla coppia:
( m , e ) tale che:
x = m * b^e Il metodo prende il nome di codifica in virgola mobile
m viene detto mantissa, e viene detto esponente
Arch. Elab. - S. Orlando 33
Normalizzazione
Per ogni numero esistono infinite coppie che lo rappresentano. Esempio (b = 10):
346,09801 è rappresentato da ( 346,09801 , 0 ) oppure ( 346098,01 , -3 ) oppure
( 0,034609801 , 4 ) … ecc. Si fissa la posizione della virgola rispetto alla prima cifra significativa (di solito subito dopo) Unico rappresentante: ( 3,4609801 , 2 )
+ sinistra < virgola > destra -
Arch. Elab. - S. Orlando 34
Intervallo di rappresentazione
Esempio con b = 10, usando 4 cifre per m e 2 per e (esclusi i segni), l’insieme rappresentato è:
[ -9.999*10^99 , -1.000*10^-99 ] U { 0 } U
[ +1.000*10^-99 , +9.999*10^99 ]
0
-1*10^-99 1*10^-99 9,999*10^99 -9,999*10^99
Arch. Elab. - S. Orlando 35
Limitazione dell’intervallo
Overflow: il numero è troppo grande per essere rappresentato Underflow: il numero è troppo piccolo per essere rappresentato Underflow graduale: se il numero diventa piccolo, diminuisce il numero di cifre della mantissa. esempio: 1.234 • 10^Emin 1.234 • 10^Emin / 10 => 0.123 • 10^Emin 0.123 • 10^Emin / 10 => 0.012 • 10^Emin 0.012 • 10^Emin / 10 => 0.001 • 10^Emin 0.001 • 10^Emin / 10 => 0.000 • 10^Emin
Arch. Elab. - S. Orlando 36
Numeri floating point
Forma: Arbitraria 363,4 * 10^34 Normalizzata 3,634 • 10^36 Notazione binaria Normalizzata 1.xxx • 2^yy Forma standardizzata : IEEE 754 • Singola precisione 8 bit esponente, 23 bit mantissa • Doppia precisione 11 bit esponente, 52 bit mantissa
Arch. Elab. - S. Orlando 37
Standard IEEE 754
Il bit '1' bit più significativo della mantissa è implicito si risparmia 1 bit Esponente è biased (polarizzato), per avere numeri sempre positivi: 00...000 esponente minimo 1 1...1 1 1 esponente massimo Bias 127 per singola precisione, 1023 per doppia precisione Esempio di esponente biased (semplice precisione) : se gli 8 bit dell’esponente biased contengono 10100011 = 163 allora l’esponente vale: 163-127 = 36 se gli 8 bit dell’esponente biased contengono 00100111 = 39 allora l’esponente vale: 39-127 = -88
Valore -> (-1)segno * (1 + mantissa) * 2^(esponente_biased – bias)
Arch. Elab. - S. Orlando 38
Esempio 1
Rappresentazione in semplice precisione di: - 0.75 rappresentazione decimale: - 0.75 = - 3/4 = - 3 / 22 rappresentazione binaria: -11 * 2^2 = - 0,11 = - 1,1 • 2^-1 Floating point: bit segno: = 1 mantissa: = 1 + ,1000..... esponente biased: = (-1 + 127) = 126 0 1 1 1 1 1 1 0
100 0000 0000 0000 0000 0000 01111110 1 segno esponente biased mantissa
Arch. Elab. - S. Orlando 39
Esempio 2
Esercizio 1. 1) Dati due numeri decimali A=0,546875 e B=2,1875. Fornire la codifica completa in virgola mobile a singola precisione di A e
B. 2 )Effettuare la somma A+B
Arch. Elab. - S. Orlando 40
Soluzione Esempio 2 – pag.1
Devo codificare in singola precisione i due numeri. Codifico separatamente la parte intera e la parte decimale.
A: I=0 codifica=0 (intero) D=0,546875 Per la parte decimale, invece che fare la divisione per 2, moltiplico per 2. Se il risultato
supera 1.0, l'uno viene messo nella colonna di sinistra e entra nella mantissa: |546875 -> 0,546886*2= 1,09375 1 + 0,09375 1|093750 0|187500 0|375000 0|750000 1|500000 1|000000 e la mantissa si legge dall'alto verso il basso. Il numero (I.D) risulta: 0,100011, che normalizzato diventa: 1.00011 x 2-1 Segno: 0 Esponente: -1 + 127 = 126 = 01111110 Mantissa: 000011 (ricordarsi di eliminare il bit nascosto)
Arch. Elab. - S. Orlando 41
Soluzione esempio 2 – pag.2
B: Si procede in modo analogo: I=2 codifica 10 D=0,1875 |1875 0|3750 0|7500 1|5000 1|0000 Parte decimale =0011 Il numero risulta: 10.0011, che normalizzato diventa: 1.00011 x 2+1 Segno: 0 Esponente: +1 + 127 = 128 = 10000000 Mantissa: 00011 (ricordarsi di eliminare il bit nascosto) A: 0 01111110 0000110000.... B: 0 10000000 0001100000....
Arch. Elab. - S. Orlando 42
Soluzione esempio 2 – pag.3
• A: 0 01111110 0000110000.... • B: 0 10000000 0001100000....
• Ora per sommarli devo portarli ad avere lo stesso esponente: A: -1 B: +1 B ha esponente più grande, quindi traslo A: 1.00011 x 2-1 0.0100011 x 2+1 Ora posso sommare i due numeri dato che hanno lo stesso esponente, considerando (per B) anche il bit nascosto: A 0.0100011 B 1.0001100 ---------------- 1.0101111 Il risultato quindi sarà: 0 10000000 0101111000000
Arch. Elab. - S. Orlando 43
Soluzione esempio 2 - pag.4
Cioè: Esponente: 10000000 -> 128 -> exp = 128-127 = 1 Numero: 1.0101111 (riaggiungo il bit nascosto) 1.0101111 x 2^1 = 10.101111 Che, riconvertendo parte intera e parte decimale separatamente diventa: 2.734375 che è il risultato di 0.546875+2.1875
Arch. Elab. - S. Orlando 44
Standard IEEE 754 (1985)
Semplice precisione a 32 bit
MANTISSA ESPONENTE SEGNO 1 8 23
MANTISSA ESPONENTE SEGNO 1 11 52
Semplice precisione a 64 bit
Arch. Elab. - S. Orlando 45
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
Numeri FP in standard IEEE 724
Arch. Elab. - S. Orlando 46
Esempio 3
Convertire il numero (-23,375)D in un numero binario in virgola mobile in singola precisione secondo lo standard IEEE-P754.
Soluzione: Si converta separatamente parte intera e parte frazionaria per ottenere:
23,375D => 10111,011B In forma normalizzata con bit nascosto:
10111,011 = 1.0111011 * 2^4 Per cui la mantissa risulta:
M = 0111011000 …….. Per l’esponente in eccesso 127 si ottiene:
E = 4 + 127 = 131D => 10000011B Per il segno:
S = 1 Il numero completo risulta:
1 10000011 0111011000 …….B => C1BB0000 H
Arch. Elab. - S. Orlando 47
Esempio 4
Esprimere i seguenti numeri decimali in una rappresentazione binaria su 8 bit con eccesso 127:
0; +5; -51; +126. Soluzione: 0 + 127 = 127D => 01111111B
5 + 127 = 132D => 10000100B -51 + 127 = 76D => 01001100B 126 + 127 = 253D => 11111101B
Arch. Elab. - S. Orlando 48
Esempio 5
Sia dato il seguente numero binario in virgola mobile in singola precisione secondo lo standard IEEE-P754, espresso per comodità in formato esadecimale BE900000H. Calcolarne il valore decimale.
Soluzione: Il numero trascritto in binario diventa:
BE900000H => 1011111010010000 ……….B
Segno : S = 1 => negativo Esponente : E = 01111101B => 125D Mantissa : M = 001 Il numero decimale vale:
-1.M 2^(125-127) = -1,001*2^-2 = 0,01001 => - (1 * 2^-2 + 1 *2^-5) = -0,28125