Conversione di base Dato • • • N>0 intero convertirlo in base b dividiamo N per b, otteniamo un quoto Q0 ed un resto R0 dividiamo Q0 per b, otteniamo un quoto Q1 ed un resto R1 ripetiamo finché Qn < b N=Q0b+R0 sostituendo avremo: Q0=Q1b+R1 N = Qnbn+1 + Rnbn + Rn-1bn-1 + … + R1b +R0b0 Q1=Q2b+R2 e quindi N nella base b è: ............................. QnRnRn-1 ........R1R0 Qn-1=Qnb+Rn Conversione decimale ⇒ binario Si calcolano i resti delle divisioni per due 18 9 4 2 : : : : 2 2 2 2 = = = = 9 4 2 1 resto resto resto resto 10010 0 1 0 0 137 68 34 17 8 4 2 : : : : : : : 2 2 2 2 2 2 2 = = = = = = = 68 34 17 8 4 2 1 resto resto resto resto resto resto resto 1 0 0 1 0 0 0 10001001 1 Conversione decimale ⇒ binario conversione in base binaria di 123 decimale 123 61 30 15 7 3 :2 :2 :2 :2 :2 :2 61 30 15 7 3 1 resto 1 resto 1 resto 0 resto 1 resto 1 resto 1 12310 = 11110112 Conversione decimale ⇒ ottale conversione in base ottale di 10268 decimale 10268 1283 160 20 :8 :8 :8 :8 1283 160 20 2 resto 4 resto 3 resto 0 resto 4 1026810 = 240348 2 Conversione binario ⇒ decimale 5 101100due = 1dieci×2dieci + 0dieci×24dieci+ 1dieci×23dieci+ 1dieci×22dieci+ 0dieci×21dieci+ + 0dieci×20dieci = = 1dieci×32dieci + 0dieci×16dieci + 1dieci×8dieci + 1dieci×4dieci+ 0dieci×2dieci + 0dieci×1dieci = = 32dieci + 8dieci + 4dieci = = 44dieci 101110101due = 1dieci×28dieci+ 0dieci×27dieci+ 1dieci×26dieci+ 1dieci×25dieci+ 1dieci×24dieci+ 0dieci×23dieci+ 1dieci×22dieci+ 0dieci×21dieci+ 1dieci×20dieci = = 1dieci×256dieci+ 0dieci×128dieci+ 1dieci×64dieci+ 1dieci×32dieci+ 1dieci×16dieci+ 0dieci×8dieci+ 1dieci×4dieci+ 0dieci×2dieci+ 1dieci×1dieci = = 256dieci+ 64dieci+ 32dieci+ 16dieci+ 4dieci+ 1dieci = = 373dieci Notazione posizionale per i frazionari Per i numeri con la frazione il meccanismo è lo stesso vengono usate posizioni e potenze negative della base Se scriviamo un numero frazionario in base b c (n- 1) c (n- 2) .. c 2 c1 c 0 . c -1 c -2 c -3 … c dove ogni cifra in posizione i viene indicata con c -m i Una cifra in posizione i di un numero in base b ha peso ci · b ; quindi, il valore del numero è la somma dei pesi di ogni cifra: n −1 i −m X = ∑ Ci ⋅ b + ∑ C i ⋅ b i i i =0 i = −1 3 Notazione posizionale per i frazionari Quindi per la rappresentazione di 853.43 si ha che: – c 2 =8, c 1 =5 , c 0 =3 – c -1 =4, c -2 =3 • Essendo composta da n= 3 cifre intere e da m= 2 cifre decimali il suo valore è: n −1 −m X = ∑ Ci ⋅ b + ∑ C i ⋅ b i i i =1 i = −1 c2 ·102 + c1 · 101 + c0 · 100 + c-1 · 10-1 + c-2 · 10-2 = 8 · 102 + 5 · 101 + 3 · 100+ 4 · 10-1 + 3 · 10-2 Conversione decimale ⇒ binario per i numeri con parte frazionaria Procedimento che a partire da una frazione F<1 – Ottiene la rappresentazione di F in binario (o una sua approssimazione) Sequenza ripetuta di moltiplicazioni per 2 Si ottiene una parte intera (che può essere 0 o 1) ed una parte decimale F1 La parte intera rappresenta il bit più significativo, mentre F1 viene moltiplicato per 2 Si ottiene una parte intera (che può essere 0 o 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 è uguale e 0 oppure decidiamo di fermarci…. 4 Conversione decimale ⇒ binario per i numeri con parte frazionaria Esempio: conversione in binario di 0.81 Parte intera 0 . 1 1 0 0 1 1 0. 0. 0. 0. 0. 0. 81 62 24 48 96 92 · · · · · · 2 2 2 2 2 2 = = = = = = 1. 1. 0. 0. 1. 1. 62 24 48 96 92 84 1 1 0 0 1 1 Alcuni commenti … • Il processo di conversione di una frazione non necessariamente termina • Una frazione decimale con un numero finito di cifre può essere rappresentata con un numero infinito di cifre binarie – possiamo terminare il procedimento quando riteniamo di aver raggiunto una precisione desiderata 5 Esempio: conversione parte frazionaria conversione di 0.73 con 8 bit 0.73·2=1.46 1 cifra più significativa 0.46·2=0.92 0 0.92·2=1.84 1 0.84·2=1.68 1 0.68·2=1.36 1 0.36·2=0.72 0 0.72·2=1.44 1 0.44·2=0.88 0 cifra meno significativa …quindi (0.73) = (0.10111010) con 8 bit rappresentiamo il numero 0.7265625 Casi particolari di conversione B1 -------> B2 B1 = B2k Caso in cui la base di partenza è una potenza di ordine k della base di arrivo B2 = B1k Caso in cui la base di arrivo è una potenza di ordine k della base di partenza 6 B1 = B2k B1 --------> B2 Bisogna rappresentare ogni cifra della rappresentazione in base B1 nelle corrispondenti k cifre della rappresentazione in base B2 B1 = 8; B2 = 2 k = 3 infatti 8 = 23 Ogni cifra in base B1 può essere rappresentata in base B2 con 3 cifre Esempio 728 ------> rappresentazione in base 2? 7 28 111 010 2 B2 = B1k B1 ----------------> B2 B1 = 2 Raggruppare a k a k le cifre della k=3 rappresentazione in base B1 e convertirle in una sola cifra in base B2 B2 = 8 1101112 ------> rappresentazione in base 8? 110 1112 VV 6 78 7 … altro esempio 101112 ------> rappresentazione in base 8? 010 1112 VV 2 78 aggiungere uno 0 per ogni cifra mancante a sinistra (cifre più significative) Overflow e underflow overflow: tentativo di rappresentare un numero esterno all’intervallo – Impossibilità di rappresentare il numero Utilizzando la numerazione posizionale in base 2 un numero M espresso su n bit potrà assumere valori compresi tre 0 ≤ M ≤2n-1 underflow: un numero x ≠ 0 viene rappresentato da y = 0 – ovviamente ha senso solo nel caso in cui X è un intervallo di numeri reali, rappresentati da Y (intervallo finito) con un’approssimazione ε 8 Aritmetica dei numeri naturali • Algoritmi classici per la realizzazione delle operazioni aritmetiche (noti dalle elementari) • le regole sono le stesse per tutti i sistemi di numerazione posizionali (non solo quello decimale): – – – per addizione e sottrazione numeri in colonna e riporto …, per moltiplicazione e divisione uso di tavole pitagoriche per le singole cifre … un esempio ... 1 1 0 0 riporti 4987 + 3232 8219 Addizione in binario La somma di due numeri naturali espressi nel sistema binario viene eseguita con le stesse modalità del sistema decimale Si dispongono i due numeri in colonna e si sommano tra loro le cifre (bit) di ogni colonna, partendo dalla meno significativa (ovvero da destra), e ricordando quanto vale la somma e il riporto di ciascuna coppia di cifre binarie: Tabella di addizione Ri Ai Bi Si 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 Ai+Bi = Si Ri = Carry o Riporto 9 esempio 1 riporto 1 1 1 1 1 1 1 0 1 0 1 0 0 1 0 0 1 0 + Sottrazione in binario La sottrazione di due numeri naturali rappresentati in base due viene eseguita (analogamente a quanto avviene in base dieci) incolonnando i numeri e sottraendo tra loro le cifre in ogni colonna, partendo dalla meno significativa (ovvero quella più a destra), e ricordando quanto vale la sottrazione ed il prestito di ciascuna coppia di cifre binarie Tabella della sottrazione Ai 0 0 1 1 Bi = Borrow o Prestito Bi Si 0 0 1 1 0 1 1 0 Ai-Bi = Si Bi 0 1 0 0 10 esempio 1 1 0 1 1 0 1 1 0 0 1 0 1 - borrow Overflow Nel caso in cui si abbia un numero limitato di bit a disposizione , si possono avere due casi particolari di errore: Carry sul bit più significativo; Borrow dal bit più significativo. In entrambi i casi il numero di bit fissato non è sufficiente per rappresentare il risultato. Tale condizione si dice di overflow. 11 Esempio di overflow Considerando i numeri binari di 4 bit, effettuare la somma 9 + 7. 910=10012 710=01112 1 riporto 1 1 0 0 1 0 1 1 1 0 0 0 0 + Il risultato non è rappresentabile su 4 bit, quindi si ha overflow Esempio di overflow Considerando i numeri binari di 4 bit, effettuare la sottrazione 5 - 7. 510=01012 710=01112 1 borrow 0 1 0 1 0 1 1 1 1 1 1 0 - Il risultato non è rappresentabile su 4 bit, quindi si ha overflow 12 Operazione di scalamento a sinistra Uno scalamento a sinistra di un numero binario equivale ad una moltiplicazione per 2. 00101101 01011010 Inserito uno 0 in fondo Uno scalamento di N posizioni a sinistra equivale a moltiplicare il numero binario per 2N . Scalamento a destra Uno scalamento a destra di un numero binario equivale ad una divisione per 2. 00101101 00010110 Inserito uno 0 in cima Scalamento a destra Uno scalamento di N posizioni a destra equivale a dividere il numero binario per 2N . 13 Definizioni: numerali e numeri 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 in base 2 – Un numero dell’ordine di vari milioni in base 16 Interi positivi e negativi Finora abbiamo considerato solamente la rappresentazione dei numeri positivi Si utilizzano varie rappresentazioni per gli interi relativi Modulo e segno Complemento a 1 Complemento a 2 … Per rappresentare gli interi relativi, a parità di cifre si dimezza l’intervallo dei valori assoluti 14 Rappresentazione con modulo e segno Per rappresentare un numero con segno, si usa: un bit per il segno: 0 per +, 1 per – n-1 bit per il modulo Intervallo di rappresentazione: [-2 n-1 +1, +2 n-1 -1] Esempio n=4 bit intervallo [-7,+7] 5 = 0101 -5 = 1101 Osservazioni – Intervallo di rappresentazione simmetrico – Problema: doppia rappresentazione dello zero (nel caso di 8 bit 10000000 e 00000000) – Ulteriore problema: addizione e sottrazione complicata da segno dei numeri, modulo dei numeri Conversione da MS a numero relativo Per effettuare la conversione si scorpora il numero in due parti: Il bit più significativo è decodificato come segno Gli N-1 bit meno significativi sono decodificati come valore assoluto del numero relativo 15 Esempio Convertire nei corrispondenti numeri relativi le seguenti rappresentazioni modulo e segno: 10100 01110. 10100: 1: bit di segno = numero negativo 0100: valore assoluto = 4 Il numero relativo corrispondente è -4 01110: 0: bit di segno = numero positivo 1110: valore assoluto = 14 Il numero relativo corrispondente vale +14. ... vantaggi e svantaggi • vantaggio: coincide con la nostra usuale rappresentazione • svantaggio: richiede il trattamento separato di segno e modulo: algoritmi aritmetici più pesanti ... ... nei calcolatori, per ovviare agli svantaggi dell’aritmetica della rappresentazione in segno e modulo, si adottano altre rappresentazioni ... 16 Rappresentazione in complemento alla base Nella rappresentazione in complemento alla base si dà una diversa attribuzione dei pesi associati alle cifre che codificano il numero: Alla cifra più alta è associato un peso negativo Le cifre più basse hanno un peso positivo Rappresentazione in complemento a 1 Si aggiunge uno 0 a sinistra alla rappresentazione dei numeri positivi Per cambiare di segno si complementa il numerale bit a bit • I numerali positivi iniziano per 0, i negativi per 1 • Intervallo di rappresentazione con n bit: [-2 n-1 +1, +2 n-1 1] • È una notazione posizionale: Pesi delle cifre: (-2 n-1 +1) 2 n-2 ... 2 1 2 0 Esempio n=4 bit intervallo di rappresentazione [-7, +7] 5 = 0101 -5 = 1010 (-7+2) Complementare = cambiare segno Doppia rappresentazione dello 0 17 Rappresentazione in complemento a 2 I numeri positivi hanno la stessa rappresentazione che in complemento a 1 I negativi si ottengono sommando 1 alla loro rappresentazione in complemento a 1 Intervallo di rappresentazione con n bit: [-2 n-1 , +2 n-1 -1] Pesi delle cifre: -2 n-1 2 n-2 ... 2 1 2 0 Consideriamo il numero espresso in base 2 x(n-1)x(n-2) …x0 • Il bit più significativo xn-1 assume peso negativo –2 n-1 • Quindi, il valore di un numero N espresso in complemento a 2 è n−2 N = − x( n −1) 2 n −1 + ∑ xi 2i i =0 Intervallo più esteso ma asimmetrico una sola rappresentazione dello 0 Rappresentazione in complemento a 2 Esempio: n=4 bit intervallo [-8, +7] 510=0101c2 -510 = 1011C2 (-8+2+1) Prima regola pratica per complementare (calcolare la rappresentazione di -X a partire da quella di X): Effettuare il complemento di ogni bit di X ed aggiungere 1 Esempio (4 bit) +610=0110C2 Complemento di tutti i bit: 1001 Aggiungere 1: 1001+1 = 1010 C2 = -6 10 Seconda regola pratica per complementare: Partendo da destra si lasciano invariati tutti i bit fino al primo 1 compreso, e poi si complementa bit a bit - Gli ultimi 2 bit rimangono invariati: __10 - Complementare gli altri 2 bit: 1010 C2 = -6 10 18 Conversione decimale-binario (CP1 e CP2) Abbiamo già visto come fare se il numero X è positivo. Se il numero X è negativo: negativo: – Determinare il numero minimo di bit da usare (nmin ) – Convertire il numero positivo corrispondente in notazione a nmin bit – Complementare (a 1 o 2) il numerale così ottenuto Esempio: convertire ((-347)10 in CP2 2 8 = 256 < 347 < 512 = 2 9 intervallo con n bit: [[-2 n-1 ,+2 n-1 -1] pertanto n min =10 +347 in notazione a 10 bit: -512 256 128 64 32 16 8 4 2 1 0 1 0 1 0 1 1 0 1 1 In alternativa per CP2: complementando a 2: • Si converte in binario 2 n-1 +X - 512 256 128 64 32 16 8 4 2 1 • Si mette il bit più significativo a 1 1 0 1 0 1 0 0101 • Perché? -1·2 n-1 + (2 n-1 +X) = X 19