Rappresentazione dei numeri PH. 3.1, 3.2, 3.3 1 Tipi di numeri Numeri interi, senza segno calcolo degli indirizzi numeri che possono essere solo non negativi Numeri con segno positivi negativi Numeri in virgola mobile calcoli numerici differenti gradi di precisione precisione singola (IEEE) doppia precisione (IEEE) precisione quadrupla 2 1 Rappresentazione dei numeri Notazione posizionale Rappresentazione in base 2 degli interi Conversione binario-decimale degli interi Rappresentazione in base 2 dei numeri frazionari Conversione binario-decimale dei numeri frazionari Rappresentazione in base 16 3 Sistemi di numerazione posizionali La base rappresenta il numero di cifre diverse utilizzate per rappresentare i numeri (cardinalità dell'alfabeto) Il sistema di numerazione in base 10 usa 10 cifre: { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } Il sistema di numerazione in base 8 (ottale) usa 8 cifre: { 0, 1, 2, 3, 4, 5, 6, 7 } Il sistema di numerazione in base 2 (binario) usa 2 cifre: { 0, 1 } Il sistema di numerazione in base 16 (esadecimale) usa 16 cifre: { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F } 4 2 Notazione posizionale (1) Nei sistemi di numerazione il peso di ogni cifra dipende dalla posizione: L’intero 853 (in base 10) vale: 8 centinaia (8 · 102 = 8 · 100 ) + 5 decine (5 · 101 = 5 · 10) + 3 unità (3 · 100 = 3 · 1) L’intero 675 (in base 10) vale: 6 centinaia (6 · 102 = 6 · 100 ) + 7 decine (7 · 101 = 7 · 10) + 5 unità (5 · 100 = 5 · 1) 5 Notazione posizionale (2) In generale, un numero formato da una sequenza di cifre in una base b : c( n −1) c( n − 2) ...c2 c3c0 ha un valore determinato dalla somma dei pesi (potenze della base) per il valore della cifra: n −1 ∑ (c ⋅ b ) i i =0 i ad esempio, per la rappresentazione di 745 si ha che: n −1 ∑ (c ⋅ b ) = c i i =0 i 2 ⋅102 + c1 ⋅101 + c0 ⋅100 = 7 ⋅100 + 4 ⋅10 + 5 ⋅1 6 3 IL sistema binario (1) Si usa la base 2 (numeri binari): Quindi si usano solamente due cifre, indichiamole con 0 e 1 Per esplicitare la base utilizzata, usiamo un pedice I numeri in base 10 saranno scritti come 85310 e 67510 I numeri in base 2 saranno scritti come 1002 e 112 7 IL sistema binario (2) Si consideri un numero binario: c( n −1) c( n − 2) ... c2 c3c0 il valore del numero è la somma dei pesi di ogni cifra: n −1 ∑ (c ⋅ 2 ) i i =0 i bit meno significativo - il bit di posizione 0 (peso minore) bit più significativo – il bit di posizione 31 (peso maggiore) 8 4 IL sistema binario (3) Ad esempio, il valore in base 10 del numero binario 10112 è: n −1 ∑ (c ⋅ b ) i i =0 i = c3 ⋅ 23 + c2 ⋅ 22 + c1 ⋅ 21 + c0 ⋅ 20 = 1 ⋅ 8 + 0 ⋅ 4 + 1 ⋅ 2 + 1 ⋅1 = 11 9 Conversione decimale Æ binario Procedimento mediante divisioni ripetute; ad esempio per ottenere il numero binario equivalente al numero decimale 11, si procede: 11/2 = 5 resto 1 5/2 = 2 resto 1 2/2 = 1 resto 0 1/2 = 0 resto 1 1 0 1 1 10 5 Sistema esadecimale Il sistema di numerazione in base 16 (esadecimale) usa 16 cifre: { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, E, F } A vale 10, . . . ., F vale 15 n −1 Il valore è dato da: ∑ (c ⋅ (16) ) i i =0 i Esempio, il valore di (1A5)16 è : n −1 ∑ (c ⋅ b ) i i =0 i = c2 ⋅162 + c1 ⋅161 + c0 ⋅160 = 1 ⋅ 256 + 10 ⋅16 + 5 ⋅1 = 421 11 Da base 16 a base 2 (e viceversa) Per convertire da base 16 a base 2 basta: convertire una cifra esadecimale alla volta nella corrispondente rappresentazione in base 2 Esempio: per convertire 1AC516 in base 2: 1 A C 5 0001 1010 1100 0101 Per convertire da base 2 a base 16 basta: convertire a gruppi di 4 bit per volta partendo dai quattro bit meno significativi Esempio: per convertire 100 1010 0100 1110 in base 16: 0100 1010 0100 1110 4 A 4 E 12 6 Notazione posizionale per i frazionari (1) Per i numeri con una parte frazionaria il meccanismo è lo stesso vengono usate posizioni e potenze negative della base c( n −1) c( n − 2) ... c2 c3c0 . c−1c−2 ... c− m n −1 −m i =0 i =−1 ∑ (ci ⋅ bi ) + ∑ (ci ⋅ bi ) Esempio, per rappresentare il numero 853.43 risulta: 8 ⋅102 + 5 ⋅101 + 3 ⋅100 + 4 ⋅10−1 + 3 ⋅10−2 13 Conversione numeri frazionari Procedimento che a partire da una frazione F < 1 ottiene la rappresentazione di F in binario (o una approssimazione) Sequenza ripetuta di moltiplicazioni: Moltiplichiamo F per 2 Si ottiene una parte intera (che può essere 0 oppure 1) ed una parte decimale F1 La parte intera rappresenta il primo bit più significativo mentre F1 viene moltiplicato per 2 Si ottiene una parte intera (che può essere 0 oppure 1) ed una parte decimale F2 La parte intera rappresenta il secondo bit più significativo mentre F2 viene moltiplicato per 2 … fino a quando Fi vale 0 oppure decidiamo di fermarci… 14 7 Conversione numeri frazionari Esempio, convertire 0.81 : 0 . 1 0.81 ⋅ 2 = 1.62 parte int 1 0.62 ⋅ 2 = 1.24 parte int 1 0.24 ⋅ 2 = 0.48 parte int 0 0.48 ⋅ 2 = 0.96 parte int 0 0.96 ⋅ 2 = 1.92 parte int 1 0.92 ⋅ 2 = 1.84 parte int 1 1 0 0 1 1 Sequenza ripetuta di moltiplicazioni, . . . si prende la parte intera 15 Conversione numeri frazionari Il processo di conversione di una frazione non necessariamente termina Una frazione decimale con un numero finito di cifre può avere un numero infinito di cifre nella rappresentazione binaria possiamo terminare il procedimento quando riteniamo di aver raggiunto una precisione sufficiente 16 8 Interi con segno Interi con segno 17 Interi con segno Finora abbiamo solamente considerato la rappresentazione di interi positivi, per rappresentare interi con segno: tre possibili rappresentazioni sono: la rappresentazione con modulo e segno la rappresentazione in complemento a uno la rappresentazione in complemento a due 18 9 Rappresentazione con modulo e segno La rappresentazione in modulo e segno usa il bit più significativo per indicare il segno: (+ +) se bit31 = 0, (--) se bit31 = 1 Il valore del numero risulta essere: N= n−2 ∑ (c ⋅ 2 ) i i =0 i se cn −1 = 0 n−2 N = −∑ (ci ⋅ 2i ) se cn −1 = 1 i =0 19 Alcuni problemi del “modulo e segno” Addizione e sottrazione complicata da segni dei numeri modulo dei numeri Doppia rappresentazione dello zero: zero infatti lo zero può essere rappresentato (es.: su 8 bit) sia da 0 000 0000 che da 1 000 0000 Non va bene ! Vorremmo… una rappresentazione che faciliti la progettazione della ALU che non deve essere complicata da problemi dovuti alla rappresentazione 20 10 Rappresentazione in complemento 2 Rappresentazione in complemento 2 21 Rappresentazione in complemento 2 Dato un numero in base 2 : c( n −1) c( n − 2) ... c3 c2 c0 Il valore del numero espresso in complemento a due è : V = − cn −1 ⋅ 2 n −1 n−2 + ∑ (ci ⋅ bi ) i =0 Il bit più significativo assume peso negativo ! 22 11 Rappresentazione in complemento 2 Poiche’ è : − cn −1 ⋅ 2 n −1 > n−2 ∑ (c ⋅ b ) i i i =0 Il numero è positivo se il bit più significativo vale 0 Il numero è negativo se il bit più significativo vale 1 23 Rappresentazione in complemento 2 Esempio, il numero 1 1 0 1 su 4 bit vale : − 1 ⋅ 8 + 1 ⋅ 4 + 0 ⋅ 2 + 1 ⋅ 1 = −8 + 4 + 1 = − 3 Esempio, i numeri in complemento 2 su 4 bit : 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 0 7 6 5 4 3 2 1 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 -8 -7 -6 -5 -4 -3 -2 -1 24 12 Conversione da decimale a binario Supposto X numero decimale da convertire a) Fissare il numero n di cifre binarie da usare per la rappresentazione del numero convertito in binario b) se X è positivo : si converte X in binario su gli n-1 bit meno significativi si pone il bit più significativo a 0 c) se X è negativo : si converte in binario 2n-1 + X su gli n-1 bit meno significativi si pone il bit più significativo a 1 25 Conversione da decimale a binario Esempio: convertire il numero X = -4 su n = 5 bit convertiamo 2n-1 + X = 24 – 4 = 16 – 4 = 12 su n-1 = 4 bit otteniamo il risultato parziale 1 1 0 0 mettiamo il bit più significativo (il quinto) a 1 otteniamo il risultato finale 1 1 1 0 0 26 13 Lavorare con il complemento a due Espansione: ad es. passare da numeri a 16 bit a numeri a 32 bit richiesto per operazioni con registri (32 bit) e operazioni immediate (16 bit) Estensione del segno i 16 bit nemo significativi restano invariati copia il segno (bit più significativo) nei rimanenti 16 bit 0000 0000 0000 0010 Æ2 0000 0000 0000 0000 0000 0000 0000 0010 1111 1111 1111 1110 Æ -2 1111 1111 1111 1111 1111 1111 1111 1110 27 Addizione binaria PH 3.3 28 14 Esempio di addizione Supponiamo di addizionare i due numeri binari 01100 (1110) e 10010 (1810) : riporti 0 0 1 0 0 1 0 1 1 + 1 0 0 1 0 = 1 1 1 0 1 29 Aritmetica complemento a due Operazione di negazione Negazione nell'aritmetica complemento a 2 : dato un numero A in rappresentazione binaria complemento a due vogliamo ottenere –A (sempre in rapp.zione binaria) Per ottenere la rappresentazione in complemento due di -A (1) si complementa ogni cifra binaria di A (2) si aggiunge 1 alla sequenza di bit cosi ottenuta 30 15 Operazione di negazione Esempio, si vuole ottenere la negazione del numero A = -62 (nella rappresentazione binaria complemento 2 su 8 bit) la rappresentazione su 8 bit di –62 è : 1 1 0 0 0 0 1 0 il suo complemento bit a bit è : 0 0 1 1 1 1 0 1 1 1 1 sommando 1 si ottiene il risultato : 0 0 1 1 0 31 Operazione di negazione, giustificazione Supponiamo che A (in complemento a 2) sia il numero da negare, il suo valore è: A = −cn −1 ⋅ 2 n −1 n−2 + ∑ (ci ⋅ 2i ) i =0 Costruiamo B (negazione di A) complementando i bit di A ed aggiungendo 1, otteniamo: B = −c n −1 ⋅ 2 n −1 n−2 + 1 + ∑ ( c i ⋅ 2i ) i =0 Calcoliamo A + B; se vale A + B = 0 allora B = -A A + B = −(cn −1 + c n −1 ) ⋅ 2 n −1 n−2 + 1 + ∑ (ci + ci ) ⋅ 2i i =0 32 16 Operazione di negazione, giustificazione Osservando che : (c + c ) = 1 Dall'espressione: A + B = −(cn −1 + c n −1 ) ⋅ 2 n −1 n−2 + 1 + ∑ (ci + ci ) ⋅ 2i i =0 Ricaviamo : A + B = −2 n −1 n−2 + 1 + ∑ 2i = −2n −1 + 1 + (2n −1 − 1) = 0 i =0 33 Operazione di negazione, osservazioni Supponiamo di negare il numero A = 0 (rappresentazione in complemento a 2 su 5 bit) la rappresentazione: 0 0 0 0 0 il complemento bit a bit: 1 1 1 1 1 sommando 1 : 1 1 1 1 1 il bit di riporto viene ignorato ! 10 10 10 10 11 + 1 0 0 0 0 0 34 17 Operazione di negazione, osservazioni −2n−1 Se si prova a negare ne risulta: 1 0 0 0 0 la rappresentazione: il complemento bit a bit: 0 1 1 1 1 sommando 1 : 0 1 1 1 1 10 10 10 10 11 la negazione del numero non può essere rappresentata in complemento a 2 ! + 1 0 0 0 0 35 Operazione di negazione, osservazioni − 2 n −1 − 1 Il massimo positivo è : 0 1 corrispondente a : Il massimo negativo è : corrispondente a : 1 . . . 1 1 1 1 −2n−1 1 0 0 . . . 0 0 0 0 Un numero negativo in più rispetto ai numeri positivi Assimetria inevitabile, dovendo rappresentare: i positivi, lo zero, e i negativi con un numero 2n di configurazioni possibili 36 18 La regola di overflow Nella somma di interi con segno rappresentati in complemento due si verifica un OVERFLOW se e solo se: la somma di due interi positivi da come risultato un intero negativo la somma di due interi negativi da come risultato un intero positivo La somma di due operandi con segno opposto non può dare overflow; infatti: la somma è minore o uguale, in valore assoluto, di uno degli addendi degli addendi; es. -10 + 4 = -6 37 Somma e overflow (1) Somma dei numeri 5 e 4 su n=4 bit ( max rappr. 23-1=7 ) 0 1 0 1 overflow, la somma di due numeri positivi non può dare un negativo ! + 0 1 0 0 = 1 0 0 1 38 19 Somma e overflow (2) Somma dei numeri -6 e -7 su n=4 bit ( min rappr. -23 = -8 ) 1 0 1 0 + 1 0 0 1 l’ultimo bit di riporto viene ignorato 1 0 0 1 = 1 overflow, la somma di due numeri negativi non può dare un positivo ! 39 Sottrazione Per calcolare A – B si osserva che A – B = A + (-B) procedimento: negazione di B somma A + negazione di B nella rappresentazione complemento 2 non è necessario un circuito apposito diverso da quello della somma per implementare in hardware la sottrazione ! 40 20 Overflow sottrazione Sottrazione implementata con negazione e somma Vale regola overflow somma somma di due interi positivi con risultato un intero negativo somma di due interi negativi con risultato un intero positivo Sottrazione operandi con lo stesso segno Æ NO overflow operandi segno diverso: se risultato segno diverso dal minuendo Æ SI overflow Riassunto condizioni overflow operazione A B risultato A+B ≥0 ≥0 <0 A+B <0 <0 ≥0 A-B ≥0 <0 <0 A-B <0 ≥0 ≥0 41 Esempio overflow in sottrazione A – B = 5 – (-3) = A + (-B) = + 8 A = 5 Æ rappr. su 4 bits B = -3 Æ rappr. complemento 2 A positivo, B negativo risultato negativo Î overflow A = 0101 B = 1101 - B = 0011 0 1 0 1 + 0 0 1 = 1 1 0 0 0 42 21 43 22