SISTEMI DI NUMERAZIONE SISTEMI DI NUMERAZIONE La necessità di numerare gli oggetti e, più in generale, di esprimere concetti numerici nasce agli albori della civiltà umana. Fin dai tempi più antichi ogni civiltà ha sempre cercato di associare dei simboli ai concetti numerici per rendere possibile la trascrizione e la comunicazione; la scelta del tipo di simbolo da utilizzare per tale rappresentazione ed il significato assunto da determinata sequenza di simboli costituisce quello che viene chiamato SISTEMA DI NUMERAZIONE. Noi, appartenenti all’era moderna, siamo ormai abituati da molti secoli ad utilizzare il cosiddetto sistema numerico decimale, basato sull’utilizzo dei seguenti simboli: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Utilizzando questo sistema di numerazione siamo abituati ad esprimere concetti servendoci esclusivamente di opportune combinazioni dei simboli indicati sopra. Ad esempio se avessimo un contenitore con dentro delle scatole e sapendo che abbiamo messo dentro tale contenitore 12 scatole, con il sistema di numerazione decimale potremmo dire che il contenitore contiene 12 pacchetti. Supponiamo adesso che arrivi improvvisamente un extraterrestre dicendoci che dentro il contenitore non ci sono 12 scatolette ma α β scatolette, perché nel suo pianeta adottano un sistema decimale quasi esattamente identico al nostro, solo che loro fanno uso dei seguenti simboli: Ο, α, β, γ, δ, ε, λ, µ, ν, τ Il fatto che l’extraterrestre faccia uso di simboli diversi cambia la nostra percezione del concetto numerico ? Forse l’extraterrestre vede una quantità diversa di scatole? No! La situazione resta inalterata soltanto noi adottiamo una nostra simbologia per esprimere un concetto numerico e l’extraterrestre ne adotta un’altra, ma il concetto espresso è del tutto equivalente. Questo esempio banale ci fa capire quanto sia soggettivo l’uso di un sistema o di un altro per esprimere dei caratteri numerici. Non è nemmeno necessario usare dieci simboli come facciamo noi, infatti nel corso della storia umana sono stati usati ( e si usano ancora ) dei sistemi basati non su 10, ma su un numero diverso di simboli, come per esempio il sistema usato dai Sumeri e poi dai Babilonesi basato sul numero 60, tuttora in uso per la misurazione degli angoli e per la misura del tempo. Una volta compresa l’arbitrarietà del sistema di numerazione rispetto al concetto numerico, diventa più facile svincolarsi dai legami con il sistema decimale che ci portiamo dietro come retaggio atavico ed analizzare il sistema decimale sotto un punto di vista diverso. La notazione posizionale Il sistema decimale che conosciamo ed adottiamo normalmente è costituito da una notazione in cui i simboli numerici ( ovvero le cifre 0, 1, 2, …9 ) prendono un valore numerico in relazione alla posizione che occupano all’interno della stringa numerica, con la convenzione che le cifre più a destra hanno un peso minore, mentre le cifre più a sinistra hanno un peso superiore. Bisogna accordarsi su cosa si intende per “peso”; a questo proposito consideriamo il numero 2457, gli alunni della scuola elementare imparano a trattarlo nella maniera seguente: − − − − 2 migliaia 4 centinaia 5 decine 7 unità Adesso osserviamo che il numero, sulla base del ragionamento appena svolto, può essere visto in questa forma : 2457 = 2 • 1000 + 4 • 100 + 5 • 10 + 7 • 1 osserviamo che 100, 100, 10, 1, possono essere espressi come potenza di 10 nella forma: 2457 = 2 • 103 + 4 • 102 + 5 • 101 + 7 • 100 SISTEMI DI NUMERAZIONE Possiamo allora dire che alla posizione più a destra corrisponde la “potenza più piccola” di 10, mentre alla posizione più a sinistra corrisponde la “potenza più grande” di 10. Le varie potenze di 10 ci permettono quindi di stabilire una “gerarchia” tra le varie cifre della stringa, rendendoci possibile introdurre il concetto di cifra più significativa (la cifra corrispondente alla potenza più alta ) ed il concetto di cifra meno significativa ( la cifra corrispondente alla potenza più bassa ). Dall’esempio fatto si possono trarre alcune conclusioni interessanti: - in generale non è detto che sia necessario usare 10 simboli per esprimere concetti numerici, si può ricorrere anche ad un numero diverso di simboli utilizzando una notazione posizionale - un sistema di numerazione è identificato dal numero di cifre che sono usate per esprimere i concetti numerici - l’importanza delle cifre stesse in una stringa numerica è indicata mediante l’uso di potenze crescenti di tale numero di cifre Possiamo a questo punto esprimere alcune considerazioni di carattere generale: • • • Il numero di cifre usate in un sistema di numerazione prende il nome di BASE Le potenze crescenti della base ( nel nostro esempio 100; 101; 102…etc.) definiscono il PESO di ciascuna singola cifra Mediante una notazione di tipo posizionale è possibile ottenere, con diverse basi numeriche, rappresentazioni equivalenti dello stesso numero ( “inteso come concetto numerico”). In generale quindi un sistema di numerazione costituito da un numero di simboli pari a b, verrà definito sistema in base b, ed utilizzerà le cifre: 0, 1, 2, ………., (b-1) Un numero N nella base b sarà esprimibile mediante una sequenza di cifre C k, le quali possono assumere proprio i valori 0, 1,2,…….,(b-1) nella forma seguente: Nb = ( Cn-1 Cn-2 ………..C1 C0 ) b Dove il pedice b sta ad indicare qual è la base del sistema di numerazione che stiamo usando. In questa rappresentazione C0, C1,……, C n-1 sono le cifre ( o per meglio dire la stringa di cifre )che costituiscono il numero nella base b, aventi peso rispettivamente b0, b1,………, b n-1; è possibile, seguendo quest’ottica, effettuare subito la conversione tra la generica base b ed il sistema decimale, nel modo seguente: N10= C n-1 • b n-1 + C n-2 • b n-2 + ………. + C1 • b1 + C0 • b0 Ad esempio scegliendo b=7 avremo un sistema di numerazione a base 7 ovvero un sistema che fa uso di soli 7 simboli che potrebbero benissimo essere le cifre 0, 1, 2, 3, 4, 5, 6; il numero (3526 )7 è un numero espresso in base 7 ed il fatto che sia in base 7 è espresso dal pedice 7 che si vede oltre la parentesi che racchiude il numero. La conversione del numero (3526 )7 in base 10 ovvero nel sistema decimale farà uso proprio della notazione posizionale e sarà data nella forma seguente: ( 3526 )7 = 3 • 73+ 5 • 72 + 2 • 71 + 6 • 70 = 3 • 343 + 5 • 49 + 2 • 7 + 6 • 1= ( 1294 )10 SISTEMI DI NUMERAZIONE IN BASE DIVERSA DA DIECI Sistema ottale Abbiamo visto nel paragrafo precedente che non è necessario che si utilizzino dieci simboli; possiamo allora pensare di utilizzarne otto e precisamente le cifre da 0 a 7; il sistema ottale fare pertanto uso dei seguenti simboli: 0, 1, 2, 3, 4, 5, 6, 7 SISTEMI DI NUMERAZIONE Si chiamerà quindi sistema in base 8 ed i pesi delle singole cifre in una stringa numerica ottale saranno perciò dati da potenze di 8. La conversione di un numero ottale in decimale può avvenire secondo la definizione data nel paragrafo precedente e cioè: Nb = C n-1 • b n-1 + C n-2 • b n-2 + … + C2 • b2 + C1 b1 + C0 b0 Quindi dovendo convertire in decimale il numero ottale: ( 375 )8 = 3 • 82 + 7 • 81 + 5 • 80 = 3 • 64 + 7 • 8 + 5 • 1 = ( 253 )10 Più complicato è il discorso per quanto riguarda la conversione inversa, cioè il passaggio da decimale in ottale. Il concetto basilare che bisogna acquisire è che ciò che in decimale viene espresso mediante l’uso di dieci simboli deve essere “ distribuito “ in 8 cifre; “ distribuito “ ! Ma distribuito vuol dire diviso quindi l’idea di fondo è che si debba ricorrere per questo tipo di conversione ad una serie di operazioni di divisione. Vediamo ora come si può procedere alla conversione del numero decimale ( 253 ) 10 nel corrispondente numero ottale. - Il primo passo è dividere 253 per 8; tale divisione dà come risultato 31 con resto di 5 Teniamo da parte il 5 e dividiamo nuovamente 31 per 8, vediamo che il risultato è 3 con resto di 7 Teniamo da parte il 7 e dividiamo 3 per 8; ovviamente otteniamo come risultato 0 con resto di 3 Avendo ottenuto quoziente nullo il procedimento si arresta A questo punto possiamo dire che il primo resto che abbiamo trovato è la cifra ottale meno significativa ( quella di peso 80 per il nostro numero), mentre l’ultimo resto che abbiamo trovato è la cifra più significativa ( quella di peso 82 per il nostro numero); possiamo vedere meglio il risultato ottenuto costruendo la tabella seguente: OPERAZIONE 253/8 31/8 3/8 QUOZIENTE 31 3 0 RESTO 5 7 3 Ragionando come indicato prima la cifra più significativa del numero ottale è il 3, poi viene il 7 ed infine il 5, che è la cifra meno significativa; pertanto risulta: ( 253 )10 = ( 375 )8 Sistema esadecimale Il sistema di numerazione Esadecimale utilizza, come indica il nome stesso sedici simboli e precisamente: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F dove le lettere A, B, C, D, E, F sono equivalenti ai numeri decimali da 10 a 15, secondo lo schema: A corrisponde a 10, B corrisponde ad 11, C corrisponde a 12, D corrisponde a 13, E corrisponde a 14, F corrisponde a 15. Per il sistema esadecimale vale la notazione posizionale esattamente come è stato utilizzato in precedenza, ovvero si avrà un sistema con base 16 e i pesi di ogni singola cifra saranno indicati con potenza crescente della base 16, da 160 per la cifra meno significativa fino a 16 k per la k-esima cifra. La conversione dal sistema esadecimale al sistema decimale avviene esattamente come indicato per i numeri attuali ovvero, dato ad esempio il numero esadecimale ( F 14 )16 la conversione si ottiene mediante il procedimento seguente: ( F14 )16 = F • 162 + 1 • 161 + 4 • 160 = 15 • 162 + 1 • 161 + 4 • 160 = = 15 • 162 + 1 • 161 + 4 • 160 = 15 • 256 + 1 • 16 + 4 • 1 = ( 3860 )10 SISTEMI DI NUMERAZIONE Per quanto riguarda la conversione inversa ovvero da decimale in esadecimale è necessario nuovamente “ distribuire “ su 16 cifre ciò che nel sistema decimale viene espresso mediante dieci simboli; il procedimento è analogo a quanto visto per il sistema attuale, ovvero si utilizza il metodo delle divisioni successive per 16 del numero che vogliamo convertire. Ad esempio si voglia convertire in esadecimale il numero 3860. - Il primo passo consiste nel dividere 3860 per 16; tale divisione dà come risultato 241 con resto di 4. Teniamo da parte il 4 e dividiamo 241 nuovamente per 16; otteniamo 15 con resto di 1. Teniamo da parte l’uno e dividiamo 15 per 16; otteniamo 0 con resto di 15. Avendo ottenuto quoziente nullo il procedimento si arresta. A questo punto si procede esattamente come per i numeri attuali cioè il primo resto che abbiamo trovato è la cifra meno significativa ( quella di peso 160 ), mentre l’ultimo resto che abbiamo trovato è la cifra più significativa ( quella di resto 162 ); possiamo vedere meglio il risultato ottenuto costruendo una tabella : OPERAZIONE QUOZIENTE RESTO 3860/16 241 4 241/16 15 1 15/16 0 15F Ovviamente dato che la cifra più significativa sarebbe 15 e visto che il sistema esadecimale si indica con F, otterremo F come cifra più significativa e pertanto ( 3860 )10 = ( F 14 )16 SISTEMA BINARIO Il minor numero possibile di simboli utilizzabili per rendere possibile una notazione posizionale è 2, pertanto b = 2 è la base più piccola e comporta l’uso di due soli simboli, 0 ed 1. Da questo ragionamento si deduce che non possono esserci sistemi di numerazione posizionale in base 1 oppure in base 0, perché nel primo caso esisterebbe una sola cifra, lo 0, mentre nel secondo caso non avremo alcuna cifra. Detto questo è da osservare che un sistema basato su due sole cifre permette di sfruttare al meglio la logica e le conclusioni dell’algebra booleana e quindi ben si presta ad essere utilizzato in ambito elettronico ed informatico. Un numero binario è rappresentato da una stringa di simboli contenente soltanto i numeri 0 ed 1; ad esempio ( 1001101)2 è un numero binario. Le singole cifre binarie ( ovvero 1 e 0 ) sono chiamate BIT dalla contrazione delle parole inglesi binary digit il cui significato è proprio quello di “cifra binaria”; per questo d’ora in avanti verrà usato indifferentemente il nome BIT oppure la denominazione cifra binaria. La conversione da binario in decimale avviene usando le solite regole della notazione posizionale, tenendo conto che in questo caso la base è 2 e quindi i pesi saranno espressi mediante potenze crescenti di 2. Ad esempio il numero binario ( 1001101)2 viene convertito in decimale con il seguente procedimento: ( 1001101)2 = 1 • 20 + 0 • 21 + 1 • 22 + 1 • 23 + 0 • 24 + 0 • 25 + 1 • 26 = = 1 + 0 •2 + 1 • 4 + 1 • 8 + 0 • 16 + 0 • 32 + 1 • 64 = ( 77 )10 Analogamente per quanto riguarda la conversione da decimale in binario si procede come per gli altri sistemi numerici che adottano la notazione posizionale e cioè è necessario “distribuire” su due simboli ciò che normalmente viene indicato con dieci simboli; il procedimento consiste perciò in una serie di divisioni successive per due. Supponiamo ad esempio di voler convertire il numero decimale ( 77 )10 in binario, si procede nel modo seguente : - prendiamo 77, dividiamo per 2 ed otteniamo 38 con resto 1 - prendiamo 38, dividiamo per 2 ed otteniamo 19 con resto 0 - prendiamo 19, dividiamo per 2 ed otteniamo 9 con resto 1 - prendiamo 9, dividiamo per 2 ed otteniamo 4 con resto 1 - prendiamo 4, dividiamo per 2 ed otteniamo 2 con resto 0 SISTEMI DI NUMERAZIONE - prendiamo 2, dividiamo per 2 ed otteniamo 1 con resto 0 prendiamo 1, dividiamo per 2 ed otteniamo 0 con resto 1 avendo ottenuto quoziente nullo il procedimento si arresta Il primo resto che abbiamo trovato rappresenta la cifra meno significativa ( quella di peso 20 ), mentre l’ultimo resto che abbiamo trovato rappresenta la cifra più significativa ( quella di peso 26 per il nostro esempio ); il numero decimale ( 77 )10 sarà allora convertito in binario nel modo seguente: ( 77 )10 = ( 100110 )2 L’introduzione del sistema binario ci permette di costruire, con il semplice uso delle conversioni di base, alcune tabelle che permettono di comparare il sistema binario direttamente al sistema ottale ed al sistema esadecimale. 1) Tabella riepilogativa decimale – ottale - binario Decimale 0 1 2 3 4 5 6 7 Ottale 0 1 2 3 4 5 6 7 Binario 000 001 010 011 100 101 110 111 Nella tabella sono riportate le cifre decimali, le corrispondenti cifre ottali e le corrispondenti stringhe binarie. Viene messo chiaramente in evidenza quanto avevamo esposto all’inizio e cioè che nel sistema di notazione posizionale uno stesso concetto numerico può essere espresso in modi diversi. Per costruire la tabella precedente sono state effettuate le conversioni di ciascuna cifra decimale da 0 a 7 prima in ottale ( ed in questo caso c’è perfetta corrispondenza ) e poi in binario. Per chiarire quanto espresso dopo vediamo che se ad esempio provo a convertire in binario 7 ottengo: 7/2 = 3 con resto di 1→ tengo 1 e procedo con 3 3/2 = 1 con resto di 1→ tengo 1 e procedo con 1 1 /2 = 0 con resto di 1→ tengo 1 ed avendo ottenuto quoziente nullo il procedimento si arresta. Pertanto 7 corrisponde a ( 111 )2. SISTEMI DI NUMERAZIONE 2) Tabella riepilogativa decimale- esadecimale- binario Decimale Esadecimale Binario Come per la tabella precedente anche qui 0 0 0000 sono stati rappresentati i numeri decimali da 1 1 0001 0 a 16, le corrispondenti cifre esadecimali e 2 2 0010 le corrispondenti stringhe binarie. 3 3 0011 Il metodo usato per determinare le stringhe 4 4 0100 binarie è semplicemente quello della 5 5 0101 conversione in binario con il solito criterio; 6 6 0110 ad esempio volendo convertire 9 avremo: 7 7 0111 9/2 = 4 con resto 1 4/2 = 2 con resto 0 8 8 1000 2/2 = 1 con resto 0 9 9 1001 1/ 2= 0 con resto 1 10 A 1010 Avendo ottenuto quoziente nullo il 11 B 1011 procedimento si arresta ed il numero 9 12 C 1100 corrisponde a: ( 1001 )2 13 D 1101 14 E 1110 15 F 1111 Se si leggono le due tabelle nella colonna relativa al corrispondente binario si osserva che per esprimere in binario le cifre ( ovvero i simboli ) che costituiscono il sistema ottale, sono necessarie al massimo tre cifre binarie ( 3 bit ), mentre per esprimere in binario le cifre che costituiscono il sistema esadecimale sono necessarie al massimo quattro cifre binarie. Appare allora possibile riscontrare una perfetta corrispondenza tra il sistema ottale ed il sistema binario e tra il sistema esadecimale ed il sistema binario. Nella tabella delle corrispondenze con il sistema ottale si vede che sono sempre stati usati tre bit, anche quando ne bastava un numero inferiore, semplicemente ponendo degli zeri a sinistra; il vantaggio dell’uso di una notazione posizionale è proprio questo, aggiungendo degli zeri a sinistra come cifra più significativa si può modificare la stringa senza per questo alterare il concetto numerico espresso. Scrivendo 000 anziché 0 oppure 001 anziché 1 possiamo esprimere tutte le cifre ottali come stringhe di tre bit, in questo modo si stabilisce una perfetta corrispondenza biunivoca tra cifre ottali e stringhe di tre bit. Lo stesso discorso vale per la tabella delle corrispondenze con il sistema esadecimale, solo che qui per esprimere una singola cifra esadecimale facciamo ricorso ad una stringa di 4 bit , stabilendo così una perfetta corrispondenza biunivoca tra cifra esadecimale e stringa di 4 bit. Sulla base di queste conclusioni è possibile effettuare direttamente la conversione binario-ottale ed ottale- binario ed analogamente binario- esadecimale ed esadecimale- binario. Vediamo con degli esempi come avvengono nel dettaglio queste conversioni. 1) Conversione diretta binario- ottale Consideriamo il numero binario ( 100110111 )2 per convertirlo direttamente in ottale si procede così: - Si parte da destra della cifra meno significativa e si separano gruppi di 3 bit 100 / 110 / 111 Si osserva che ciascun gruppo corrisponde tramite la tabella precedente ad una cifra ottale e si riportano tali corrispondenze, sempre procedendo da destra verso sinistra 111 = 7 111 = 6 100 = 4 La cifra ottale corrispondente al gruppo più a destra è la cifra meno significativa, mentre la cifra ottale corrispondente al gruppo più a sinistra è la cifra più significativa, pertanto il numero cercato è: SISTEMI DI NUMERAZIONE ( 467 )8 2 ) Conversione diretta ottale- binario Consideriamo il numero ottale ( 407 )8 la conversione diretta in binario avviene nel modo seguente: - si considerano le singole cifre ottali partendo da destra ed andando verso sinistra; si legge sulla tabella a quale stringa di bit corrisponde ciascuna cifra e si riportano tali corrispondenze, sempre procedendo da destra verso sinistra 7 = 111 0 = 000 4 = 100 - la stringa corrispondente alla cifra più a destra è da mettere come meno significativa, quella corrispondente alla cifra più a sinistra è da prendere come più significativa 100 / 000 / 111 - Il numero binario richiesto allora sarà : ( 100000111 )2 Se per caso nello svolgere la conversione diretta binario- ottale ci accorgiamo che l’ultima stringa dio bit contiene solo un bit oppure due, basterà aggiungere degli zeri a sinistra fino a che la stringa arriva a comprendere 3 bit; ad esempio si voglia convertire direttamente in ottale il numero binario (1001101)2 , suddividendo in gruppi da 3 bit si ottiene: 1 / 001 / 101 se aggiungo due zeri a sinistra non modifico il numero ( perché tanto lo zero dà un contributo nullo ), ma mi posso ricondurre a stringhe tutte da tre bit 001 / 001 / 101 ed il numero ottale cercato è allora ( 115 )8 infatti dalla tabella si ricava: 101 = 5 001 = 1 001 = 1 2) Conversione diretta binario- esadecimale Si procede esattamente come nel caso della conversione diretta binario- ottale, solo che qui i gruppi saranno di 4 bit; ad esempio volendo convertire il numero ( 101100110110 )2 si procede così : - si suddivide il numero binario in gruppi di 4 bit 1011 / 0 011 / 0110 - si converte ciascun gruppo, usando la tabella ed andando da destra verso sinistra 0110=6 0011=3 1 0 1 1 = 11 B - il numero cercato, mantenendo sempre l’ordine da destra verso sinistra è ( B36 )16 Qualora l’ultimo gruppo avesse un numero di bit inferiore a 4 basterà aggiungere degli zeri a sinistra e procedere poi esattamente come nel caso dei numeri ottali SISTEMI DI NUMERAZIONE 3) Conversione diretta esadecimale- binario Anche in questo caso basta procedere esattamente come nel caso della conversione diretta ottalebinario, solo che si utilizzerà la seconda tabella; ad esempio volendo convertire il numero ( A035 )16 si procede, sempre da destra verso sinistra, nel modo seguente: 5=0101 3=0011 0=0000 A=1010 Pertanto il numero esadecimale assegnato corrisponde al binario: ( 1010000000110101 )2 OPERAZIONI CON I NUMERI BINARI Il sistema di numerazione binario permette di svolgere le operazioni aritmetiche usuali, somma, sottrazione, moltiplicazione, divisione, mantenendo le classiche regole della normale algebra. Adesso vedremo nel dettaglio le modalità di svolgimento delle singole operazioni aritmetiche. Addizione di numeri binari Per quanto riguarda l’addizione tra numeri binari valgono le regole dell’addizione in colonna, secondo il seguente schema: 1+0 = 1 0+1 = 1 0+0 = 0 1 + 1 = 0 con riporto di 1 alla colonna successiva 1 + 1 + 1 = 1 con riporto di 1 alla colonna successiva Ad esempio si vogliono sommare tra loro i seguenti numeri binari ( 10101 )2 e ( 111 )2 , per facilitare la comprensione del procedimento vediamo in parallelo lo svolgimento decimale e lo svolgimento binario: Riporti 1° Addendo 2° Accendo Risultato BINARIO 111 10 1 0 1 + 111= ___________ 11100 DECIMALE 21+ 7= ______ 28 Come si può osservare dall’esempio basta eseguire le somme in colonna applicando in modo automatico le 5 regole enunciate e si ottiene il risultato corretto; bisogna prestare molta attenzione ai riporti, per questo motivo sarebbe utile segnalarli sempre perché è molto elevato il rischio di lasciarne qualcuno per strada. E’ consigliabile inoltre svolgere le operazioni in colonna proprio come indicato nell’esempio per evitare di “ impantanarsi “ in calcoli inutili. Potrebbe capitare sommando due numeri che il risultato sia costituito da un numero di cifre binarie maggiore di quelle degli addendi originari, questo è normale anche nel sistema decimale, infatti se sommiamo 9 e 8 otteniamo: Riporti 1° Addendo 2° Addendo Risultato BINARIO 1 1001 1000 11001 DECIMALE 9 + 8 17 SISTEMI DI NUMERAZIONE Sottrazione tra numeri binari Anche per quanto riguarda la sottrazione tra numeri binari valgono le regole dell’aritmetica elementare e le operazioni vengono svolte in colonna secondo le seguenti regole: 0–0 1–1 1–0 0–1 = = = = 0 0 1 1 con un prestito di 1 dalla cifra successiva Quest’ultima regola è la più difficile da comprendere ed è bene chiarirla con un esempio: 1001011 101 = _______________ 1000110 75 5 = _____ 70 Osserviamo nel dettaglio quello che accade quando si effettua una sottrazione con prestito, la cifra di peso 2 k+1 presta una unità alla cifra di peso 2 k 2 k+1 1 2k 0 1 = _______________ 0 1 La sottrazione 0 - 1, dopo il prestito, è come se fosse diventata 2 - 1, perché 2 k+1 / 2 k = 2 e quindi, grazie al prestito, è come se avessimo fatto l’operazione equivalente a 2 – 1. E’ comunque ovvio che questo “ 2 “ è solo un’astrazione che ci permette di capire il concetto, perché nel sistema binario esistono solo due simboli 0 e 1, però con quest’analisi si è perfettamente in grado di comprendere la parte più ostica della sottrazione binaria. Potrebbe capitare, svolgendo un’operazione di sottrazione binaria, che non sia possibile chiudere un prestito alla cifra immediatamente vicina perché essa è 0, in questo caso si chiede un prestito al primo 1 che si trova verso sinistra, e tutti gli 0 che “ sorvoliamo “ vengono trasformati in 1. Un esempio chiarisce meglio il concetto: 1 1 1010001 110 ______________ 1001011 81 6 ______ 75 Moltiplicazione tra numeri binari Non è usuale, ma si può comunque realizzare, il prodotto tra numeri binari; è possibile svolgere tale operazione in colonna, usando le regole aritmetiche. Vediamo solo un esempio di prodotto tra numeri binari: 10110 x 101 = _______________ 10110 00000– 10110 _________________ 1101110 SISTEMI DI NUMERAZIONE Basta quindi svolgere i prodotti termine a termine ed infine svolgere la somma in colonna; per la somma in colonna si utilizzano le cinque regole già enunciate per la somma . Divisione tra numeri binari E’ un’operazione ancor meno usuale della moltiplicazione, comunque anche per la divisione si opera come nel sistema decimale con le usuali regole aritmetiche. Supponiamo di voler effettuare la divisione 14 : 2, vediamo lo svolgimento sia in binario sia in decimale: 1110 10 11 10 10 10 0 10 111 14 2 7 0 Rappresentazione dei numeri relativi L’operazione di sottrazione tra due numeri è solitamente data da minuendo meno sottraendo, dal punto di vista algebrico può essere considerato equivalente alla somma tra il minuendo ed il sottraendo cambiato di segno. Pertanto la differenza può essere ricondotta ad una somma se facciamo ricorso ai numeri negativi. Una rappresentazione particolarmente usata è quella detta in modulo e segno, con la quale si usa il bit più significativo per individuare il segno, secondo la convenzione seguente: - I numeri positivi hanno il bit più significativo pari a 0 I numeri negativi hanno il bit meno significativo pari ad 1 I rimanenti bit rappresentano il modulo, ovvero il valore assoluto, del numero stesso; questo tipo di rappresentazione rende necessario aggiungere un bit oltre a quelli necessari per l’usuale rappresentazione del numero. Ad esempio con un bit possiamo rappresentare tutti i numeri compresi tra + 7 e - 7. Il difetto, che possiamo vedere dalla tabella seguente, è che esistono due rappresentazioni dello 0 e precisamente 0 0 0 0 (cioè + 0 ) e 1 0 0 0 ( cioè - 0 ). Bit relativo al segno 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 Bit relativi al modulo 111 110 101 100 011 010 001 000 000 001 010 011 100 101 110 111 Numero corrispondente +7 +6 +5 +4 +3 +2 +1 +0 -0 -1 -2 -3 -4 -5 -6 -7 Dalla tabella a fianco si può osservare come la rappresentazione in modulo e segno sia efficace ed immediata e dia in modo rapido l’opportunità all’utente di rendersi conto di quale numero sta utilizzando SISTEMI DI NUMERAZIONE RAPPRESENTAZIONE IN COMPLEMENTO A DUE Per rappresentare i numeri relativi è molto conveniente ricorrere a questo metodo, anche perché è decisamente più facile da implementare con circuiti elettronici. Per poter apprendere tale metodo è necessario acquisire il concetto di complemento alla base, valido per tutti i sistemi e non solo per il sistema binario. Dato un sistema di numerazione in base b ed un numero N di n cifre, si definisce complemento del numero alla base e si indica con N ( b) la differenza tra la potenza ennesima della base ed il numero dato: N (b) = b n - N Consideriamo ad esempio il calcolo del complemento alla base del numero binario N = ( 11001 )2 = = ( 25 )10 e vediamo come si procede al calcolo del complemento sia nel sistema binario, che nel sistema decimale. Nel sistema binario, si ha: N( 2 ) = 25 - 11001 = 100000 – 11001 = 111 Nel sistema decimale, si ha: N( 10 ) = 102 – 25 = 100 – 25 = 75 Come può essere utilizzato il complemento, ad esempio nelle operazioni di sottrazione binaria? Basta osservare che volendo svolgere la sottrazione N2 - N1 , può essere verificato la seguente uguaglianza: N2 – N1 = N2 + ( b n – N1 ) – b n = N2 + N1( b) – b n Dove è possibile controllare che se si tolgono le parentesi la semplificazione ci riporta all’espressione di partenza. Vediamo adesso di analizzare il risultato ottenuto, alla fine abbiamo scritto: N2 – N1 = N2 + N1( b) – b n cioè la differenza tra due numeri è pari alla somma tra il minuendo ed il complemento alla base del sottraendo meno la potenza ennesima della base, essendo n il numero di cifre della coppia di numeri su cui stiamo lavorando. Certamente è da osservare che questo metodo risulta particolarmente oneroso, tuttavia possono verificarsi dei casi in cui è più facile procedere con il complemento. Analizziamo adesso due casi particolarmente significativi: 1) Stiamo lavorando con due numeri N1 ed N2 tali che N1 > N2 ,applicando le definizioni precedenti si ricava: N2 – N1( b) = N2 - N1 + b n = b n – ( N1 – N2 )= (N1 – N2 )( b) Cioè otteniamo il complemento di (N1 – N2) che rappresenta correttamente il valore negativo – (N1 – N2 ) 2) stiamo lavorando con due numeri N1 ed N2 tali che N1 < N2 , applicando le definizioni precedenti si ricava: N2 + N1( b) = N2 + ( b n – N1 )= N2 – N1 + b n Cioè otteniamo il risultato corretto N2 – N1 , dopo aver eliminato b n ; questo accade se aggiungiamo una restrizione ovvero che il numero n delle cifre usate per rappresentare i numeri sia fisso. Alla luce degli esempi svolti possiamo definire in maniera rigorosa il complemento alla base nell’ambito dei numeri binari: N2(2) = ( 2 n )2 - N2 SISTEMI DI NUMERAZIONE Dove ( 2 n )2 vuol dire semplicemente che la potenza n-esima della base va espressa in binario prima di procedere, esattamente come abbiamo fatto nell’esempio numerico precedente. Accanto alla definizione di complemento a due è possibile inserire quella di complemento a uno; si ha: dato un numero N espresso da n cifre, si definisce complemento ad 1 del numero e si indica con N( 1) la seguente espressione: N(1) = ( 2 n – 1 ) – N Ad esempio se vogliamo determinare il complemento ad 1 del numero ( 1011)2 = ( 11)10 si procede nel modo seguente: N( 1 ) = ( 24 – 1 ) – N = ( 10000 – 1 ) – 1011 = 1111 – 1011 = 0100 E’ anche possibile calcolare il complemento ad 1 ed il complemento a 2 di un numero usando un procedimento decisamente più semplice. Dall’esempio precedente si vede infatti che il complemento ad 1 del numero assegnato 1011 è dato da 0100 cioè il numero di partenza con 0 al posto di 1 e viceversa; allora è possibile enunciare la seguente definizione: Il complemento ad 1 di un numero binario assegnato si ottiene dal numero di partenza scambiando gli 1 con 0 e viceversa. Analogamente per quanto riguarda il complemento a due è possibile dare la seguente definizione: Il complemento a 2 di un numero binario assegnato si ottiene dal numero di partenza, calcolando il complemento ad 1 di quest’ultimo e poi aggiungendo 1 ovvero: N(2) = N(1) + 1 Effettuando operazioni con i numeri binari abbiamo visto che non è detto sempre che si possa ottenere un risultato avente un numero di bit pari od inferiore a quello degli operandi; questo può essere un problema soprattutto quando si sceglie di operare in modo tale da avere sempre un numero di bit prefissato ( definito campo utilizzato ). I sistemi elettronici digitali funzionano in modo tale da eliminare in maniera automatica l’eventuale riporto che eccede il campo utilizzato, proprio perché sono progettati per lavorare con un numero fissato di bit. Se si sommano con lo stesso campo ( cioè con lo stesso numero di bit fissati ) può sorgere un problema se il risultato ha un numero di bit che eccede il campo, infatti, in questo caso, il bit più significativo non può essere scartato altrimenti si otterrebbe un risultato sbagliato. E’ allora necessario riconoscere questa condizione che prende il nome do OVERFLOW ( superamento della capacità ); esistono due modi di procedere per verificare l’esistenza dell’overflow: 1) Se i bit più significativi ( MSB Most Significant Bit in Inglese ) dei due operandi sono diversi allora non vi è overflow, perché i segni sono diversi 2) Se i bit più significativi dei due operandi sono uguali allora, se è uguale anche il MSB del risultato, c’è overflow. SISTEMI DI NUMERAZIONE Rappresentazione dei numeri non interi Rappresentazione in virgola fissa La posizione della virgola viene stabilita a priori e mantenuta fissa all’interno della cella di memoria che si sta utilizzando per immagazzinare il numero binario . Il numero binario viene rappresentato separando parte intera da parte frazionaria e precisamente inserendo la parte intera a sinistra della virgola e la parte frazionaria a destra della virgola; il segno sarà come al solito il bit più a sinistra. Lo schema è il seguente: Segno Parte intera 1 bit n bit , Parte Frazionaria m bit Di solito si utilizza una rappresentazione a 16 bit in cui 1 bit è reso disponibile per il segno, 7 bit sono disponibili per la parte intera ed 8 bit sono disponibili per la parte frazionaria. E’ chiaro che questa rappresentazione permette comunque la possibilità degli spostamenti della virgola, se la spostiamo dopo il termine di peso minore (cioè quello meno significativo) la rappresentazione diventa uguale a quella di un numero intero. Rappresentazione in virgola mobile Questa rappresentazione è spesso indicata con il suo nome inglese ovvero FLOATING POINT ed è molto usata per quanto riguarda i numeri binari non interi, perché, permettendo la rappresentazione con mantissa ed esponente, rende più facile lavorare su tali numeri. Osserviamo che in un qualunque sistema di numerazione un numero qualsiasi N può essere espresso nella forma: N=m•be essendo m la mantissa, e l’esponente e b la base del sistema :Ad esempio nel sistema decimale il numero 20,52 può essere scritto nel modo seguente: 20,52 = 2052 • 10- 2 = 0,2052 • 102 che, come si può notare, è una rappresentazione esattamente corrispondente alla definizione data. E’ possibile distinguere due casi in particolare: 1) Se la mantissa è tale che ( 1/b ) ≤ m < 1 si ha la cosiddetta forma normalizzata. 2 ) Se la mantissa non appartiene a tale intervallo allora si ha la forma non normalizzata. Nel nostro esempio la seconda scrittura è quella corrispondente alla forma normalizzata . Visto che il discorso fatto è valido per tutti i sistemi di numerazione, è possibile anche nel sistema binario esprimere dei numeri non interi con mantissa ed esponente. Ad esempio se volessimo rappresentare in virgola mobile il numero binario 1111,101 si può osservare che: 1111,101 = 1111101 • 2–3 = 0,1111101 • 24 L’ultima scrittura rappresenta una forma normalizzata dove si è espresso l’esponente in forma decimale solo per semplicità, mentre la rappresentazione corretta è con l’esponente anch’esso in binario: Lo schema della rappresentazione in virgola mobile è il seguente : Segno Mantissa Mantissa 1 bit n bit Segno esponente Esponente m bit SISTEMI DI NUMERAZIONE Ad esempio potendo disporre di 16 bit per la rappresentazione, potremmo avere 12 bit riservati alla mantissa ( di cui il primo è il segno ). Volendo rappresentare il numero – 101,01101100, avremo: -101,01101100 = 0,10101101100 • 23 e quindi : segno 1 mantissa 10101101100 segno 0 esponente 011 Per quanto riguarda lo svolgimento di operazioni in virgola mobile vediamo in modo particolare l’addizione, per la quale si procede andando a confrontare gli esponenti degli addendi. Se gli esponenti sono uguali, l’addizione è data dalla somma delle mantisse; ad esempio volendo effettuare la somma tra 0,1010 • 22 e 0,0101 • 22 si avrà : 0,1010 + 0,0101 = 0,1111 ovvero il risultato sarà: 0,1111 • 22 . Se invece gli esponenti sono diversi, per svolgere l’operazione occorre scalare il numero più piccolo fino a portarlo allo stesso esponente del più grande e dopo eseguire l’addizione delle mantisse. Ad esempio volendo svolgere la somma tra 0,1001 • 22 e 0,1010 • 21 si può procedere nel modo seguente: dapprima è necessario effettuare la trasformazione 0,1010 • 21 = 0,0101 • 22 dopo di che possiamo svolgere la somma delle mantisse 0,1001 + 0,0101 = 0,1110 Per quanto riguarda le altre operazioni bisogna osservare che la sottrazione può essere ricondotta ad un’addizione complementando il sottraendo; per moltiplicazione e divisione si opera lavorando sia sulle mantisse che sugli esponenti. Le mantisse vengono rispettivamente moltiplicate o divise, mentre gli esponenti vengono rispettivamente sommati oppure sottratti. Operazioni con il Sistema Esadecimale Nei paragrafi precedenti abbiamo visto come esista una corrispondenza diretta tra il sistema esadecimale ed il sistema binario, questo rende il sistema esadecimale molto utile per esprimere in maniera sintetica i numeri binari. Non dimentichiamoci infatti che una singola cifra esadecimale è rappresentata da 4 cifre binarie e pertanto è molto più facile, soprattutto per noi esseri umani, manipolare numeri esadecimali piuttosto che lunghe stringhe di bit. Vediamo ora come sia possibile effettuare le operazioni aritmetiche nel sistema esadecimale: Addizione Bisogna ricordarsi che esiste una perfetta corrispondenza tra le prime 10 cifre esadecimali e le cifre decimali e che le cifre da A ad F corrispondono via via a 10, 11,…., 15. Tenendo a mente questa particolarità è possibile realizzare l’addizione tra numeri binari semplicemnte svolgendola in colonna come alla scuola elementare e facendo riferimento al valore numerico di ciascuna cifra. SISTEMI DI NUMERAZIONE La somma in colonna si effettua con le regole usuali, mettendo in colonna le cifre di peso uguale dei due addendi e calcolando somma ed eventuale riporto alla colonna successiva; la regola è molto semplice, se la somma della colonna è minore o uguale a 15 scriviamo semplicemente la cifra esadecimale corrispondente, se invece la somma della colonna è maggiore di 15 si scrive come risultato la parte che supera 16 e si riporta 1 nella colonna di peso immediatamente superiore. Vediamo alcuni esempi di addizioni nel sistema esadecimale: 1 1 9 A 9 3 1 2 D 9 B 9 3 1 2 E Sottrazione Per quanto riguarda la sottrazione possiamo osservare che piuttosto che svolgerla in colonna, cosa piuttosto disagevole, conviene ricondurla allo svolgimento di una somma, facendo qualcosa di analogo a quello che è stato fatto per svolgere le sottrazioni in binario in complemento a 2. Risulta molto facile effettuare il “complemento a 2” direttamente in esadecimale; per realizzarlo bisogna sottrarre ogni cifra del numero esadecimale da F e poi sommare 1 al risultato così ottenuto. Vediamo un esempio: vogliamo calcolare direttamente in esadecimale il complemento a 2 del numero esadecimale C4 Passo 1: F - 4 = B F–C=3 Passo 2: abbiamo ottenuto il numero 3B adesso a ciò che abbiamo ottenuto sommiamo 1 3B +1 = 3C possiamo perciò concludere che il complemento a 2 di (C4)16 è pari a (3C)16 La sottrazione tra 2 numeri esadecimali allora è data dalla somma tra il minuendo ed il complemento a 2 del sottraendo SISTEMI DI NUMERAZIONE Codici numerici L’utilizzo della numerazione binaria e la perfetta corrispondenza esistente tra il sistema binario ed i sistemi ottale ed esadecimale fanno siche il sistema binario sia adatto per esprimere numeri, lettere oppure altri simboli mediante delle successioni di bit definite “Stringhe”. Esistono diverse tipologie di codici, ciascuno dei quali è basato su opportuni meccanismi per generare la corrispondenza tra i simboli da codificare e le apposite stringhe di bit e ciascuno con differenti specifiche e campi di applicazione. Possiamo distinguere due tipologie di codici; i codici pesati e quelli non pesati. Sono pesati quei codici che permettono di svolgere operazioni aritmetiche tra i simboli codificati, mentre sono non pesati quei codici per i quali tali operazioni non sono possibili. Una ulteriore classificazione dei codici può essere fatta distinguendo i codici numerici e quelli alfanumerici; sono numerici quei codici che fanno corrispondere ad una stringa di bit dei simboli di tipo numerico, mentre sono alfanumerici quei codici che fanno corrispondere ad una stringa di bit dei simboli che possono essere sia numerici che alfabetici. Codice BCD L’acronimo BCD che caratterizza questo codice spiega anche qual è il funzionamento del codice stesso infatti la sigla BCD significa Binary Coded Decimal , ovvero decimali codificati come binari. Il codice BCD infatti fa corrispondere a ciascuna delle 10 cifre che compongono il sistema decimale una stringa di 4 bit, secondo la tabella: Cifra decimale 0 1 2 3 4 5 6 7 8 9 Stringa di bit 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 Seguendo la tabella si possono operare delle conversioni dirette tra numeri binari e codice BCD. Vediamo alcuni esempi: 1) Se vogliamo convertire in BCD il numero 384 basta sostituire alla singola cifra decimale la stringa di 4 bit corrispondente: Numero decimale: Numero BCD: 3 8 4 0011 1000 0100 La conversione tra decimale e BCD a questo punto darà: 384 → 001110000100 2) 2) Se volgliamo convertire in BCD il numero 9576 basta sostituire alla singola cifra decimale la stringa di 4 bit corrispondente: Numero decimale: 9 5 7 6 SISTEMI DI NUMERAZIONE Numero BCD: 1001 0101 0111 0110 La conversione tra decimale e BCD a questo punto darà: 9576 → 1001010101110110 Con il codice BCD è possibile svolgere delle operazioni di addizione e correggere gli eventuali errori di funzionamento del codice. Anche in questo caso conviene procedere con degli esempi: 32 + 15 = 0011 0010 + 0001 0101 47 0100 0111 Come possiamo notare il risultato è ancora espresso mediante i simboli della tabella di conversione pertanto l’addizione è stata svolta correttamente. Le addizioni in BCD funzionano bene finché l’operazione in decimale non richiede un riporto vediamo un esempio di tale situazione, per rendere meglio comprensibile la situazione: 37 + 15 = 0011 0111 + 0001 0101 52 0100 1100 notiamo che il risultato, nella colonna delle unità produce una stringa di bit data da 1100 che non appartiene alla tabella e pertanto siamo portati a concludere che il codice in questo caso non abbia funzionato. Tuttavia se osserviamo le cose con attenzione vediamo che il risultato ottenuto è di 4 decine e 12 unità cioè in tutto 52. Quindi numericamente il risultato è corretto, ma non lo è dal punto di vista simbolico; bisogna riuscire a trovare un metodo per correggere questa disfunzione e ottenere così un risultato corretto. A questo punto ci viene in aiuto il ragionamento, sappiamo che con 4 bit è possibile rappresentare i numeri da 0 a 15, quindi 16 combinazioni. Noi però nella tabella abbiamo utilizzato solo 10 delle 16 combinazioni disponibili, lasciandone quindi 6 non utilizzate. Tra la tabella del BCD e la reale possibilità offerta dall’uso di 4 bit esiste pertanto una differenza di 6. Vediamo cosa succede se aggiungiamo 0110 (cioè 6 in binario) al risultato ottenuto e se otteniamo una serie di stringhe compatibile col codice. 0100 1100 + 0110 0101 0011 Come si può notare il risultato stavolta è corretto anche dal punto di vista simbolico. Quindi il BCD funziona sempre e anche se dovessero sorgere dei problemi di funzionamento basta sommare 6 per riportare il risultato ai simboli del codice. Codice Gray (o codice riflesso) Questo codice, contrariamente al BCD, è un codice non pesato e rappresenta i vari numeri con combinazioni di 0 e 1 che formano stringhe tali che la stringa di bit che rappresenta un numero differisce da quella del numero precedente e da quella del numero seguente per un solo bit (un po’ come accade tra le caselle delle mappe di Karnaugh). Per costruire il codice Gray si procede secondo lo schema seguente: - si scrivono in colonna lo 0 el’1 e si tira una linea tratteggiata; al di sotto della linea tratteggiata si scrivono le cifre “specchiate” cioè con ordina invertito ovvero prima l’1 e poi lo 0. Si mette uno 0 davanti alle cifre originarie , si mette 1 davanti alle cifre specchiate. SISTEMI DI NUMERAZIONE - 0 0 0 1 1 1 1 0 si procede ancora con lo stesso metodo specchiando le cifre ottenute e mettendo sempre 0 davanti a quelle di partenza e mettendo sempre 1 a quelle riflesse e si reitera il procedimento fini a quando non si raggiunge il numero di stringhe desiderato. Per la sua natura e per il metodo utilizzato per la sua costruzione il codice Gray è adatto soprattutto alla codifica di un numero di simboli che sia pari ad una potenza perfetta di 2 (4,8,16….) perché come abbiamo visto il metodo della riflessione genera ogni volta una quantità di stringhe di bit che è effettivamente una potenza perfetta di 2. Basandosi su questo aspetto e sulla riflessione possiamo costruire una trabella per la conversione delle prime 16 cifre decimali (ovvero quelle del sistema esadecimale) prima in binario e poi in codice Gray: DECIMALE 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 BINARIO 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 GRAY 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000 Esistono dei metodi di calcolo rapidi per effettuare il passaggio dal binario al Gray e viceversa; indichiamo i bit delle due codifiche con dei nomi convenzionali: - B3,B2,B1,B0 siano i bit del binario normale dal più significativo B3 al meno significativo B0; - G3,G2,G1,G0 siano i bit del codice Gray dal più significativo G3 al meno significativo G0; osservando la tabella possiamo dedurre senza problemi che per quanto riguarda lla conversione da binario a Gray si ha: G3 = B3; G2 = B2 + B3; G1 = B1 + B2; G0 = B0 + B1 L’eventuale resto generato da queste addizioni deve essere ignorato e non considerato. Per quanto riguarda la conversione inversa da Gray a binario normale possiamo osservare sempre dalle tabelle che: - i bit più significativi coincidono SISTEMI DI NUMERAZIONE - per gli altri bit osserviamo che si ottengono considerando la cifra Gray che occupa la stessa posizione e sommandola alla cifra binaria nella posizione immediatamente a sinistra ignorando l’eventuale resto ovvero riepilogando: B3 = G3; B2 = G2 + B3; B1 = G1 + B2; B0 = G0 + B1 Codice Eccesso 3 Si tratta di un codice non pesato che realizza la corrispondenza di un numero decimale con una stringa di 4 bit. Il funzionamento è molto semplice perché per ottenere la corrispondenza basta aggiungere 3 alla cifra decimale da convertire e convertire in binario puro il risultato così ottenuto. Se ad esempio volessimo convertire la cifra 5 otterremmo: 5 + 3 = 8 → 1000 se volessimo convertire la cifra 8 otterremmo: 8 + 3 = 11 → 1011 e così via. Possiamo a questo punto costruire una tabella per la conversione in codice eccesso 3 e precisamente: Decimale 0 1 2 3 4 5 6 7 8 9 Eccesso 3 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 La caratteristica fondamentale del codice eccesso 3 è quella di essere anticomplementantante ovvero ogni numero decimale ed il suo complemento a 9 sono rappresentati da due numeri che sono complementari ad 1 tra loro. Ricordiamo che nel sistema decimale si definisce complemento a 9 di un numero la cifra che si ottiene sottraendo ciascuna cifra del numero da 9. Codice Aiken 2421 Si tratta di un codice pesato che fa corrispondere ad ogni cifra di un numero decimale una stringa di 4 bit. La tabella di conversione viene realizzata dando ai 4 bit i pesi 2421 da cui il nome del codice. Se ad esempio prendiamo il numero 1101 vediamo che la corrispondenza la troviamo svolgendo i seguenti calcoli: 1x2 + 1x4 + 0x2 + 1x1 = 2 + 4 + 0 + 1 = 7 la tabella di conversione, realizzata con il criterio appena enunciato sarà allora: SISTEMI DI NUMERAZIONE Decimale 0 1 2 3 4 5 6 7 8 9 Aiken 2421 0000 0001 0010 0011 0100 1011 1100 1101 1110 1111 Codice ASCII Il codice ASCII (American Standard Code<for Information Interchange) è il codice alfanumerico più diffuso nel mondo; infatti è il codice che viene normalmente utilizzato per far corrispondere ad ognuno dei simboli che si trovano sulla tastiera una stringa di bit. In modo particolare il codice ASCII fa corrispondere a 128caratteri alfanumerici una stringa di 7 bit; i caratteri alfanumerici che compongono il codice sono in particolare le 10 cifre decimali, le lettere maiuscole e minuscole e alcuni caratteri di controllo come @, # ecc. Sono presenti diverse versioni di questo codice, soprattutto collegate ad alcune lingue in particolare; nella tabella seguente viene riportata la versione USASCII, che è una delle più diffuse. SISTEMI DI NUMERAZIONE Vediamo che nella tabella non sono riportate proprio le stringhe di bit, ma il corrispondente valore esadecimale e decimale; vediamo ad esempio che la lettera A corrisponde al valore esadecimale 41, che corrisponde al decimale 65 ed alla stringa di bit 1000001 Esiste anche una versione estesa del codice ASCII, che codifica i caratteri introdotti solo recentemente, questo porta il numero totale di simboli codificati a 256. La tabella seguente contiene appunto una lista di tali caratteri e della corrispondente codifica ASCII, osserviamo che i corrispondenti valori decimali vanno ovviamente da 128 a 255. Nella tabella precedente possiamo osservare che tutti i simboli sono codificati con 8 bit, in modo tale da poter permettere già in partenza l’estensione del codice. SISTEMI DI NUMERAZIONE E’ ovvio che per la sua stessa natura il codice ASCII è non pesato. SISTEMI DI NUMERAZIONE ESERCIZI PROPOSTI Esercitazione 1 Esercizio 1 Convertire in esadecimale ed ottale i seguenti numeri decimali • • • • • • 236 435 8765 65536 64 876 Esercizio 2 Convertire in binario i seguenti numeri decimali: • • • • • • • 32 54 16 48 254 123 445 Esercizio 3 Convertire in base 4 e base 6 i esguenti numeri decimali • • • 856 247 136 Esercizio 4 Convertire in decimale i seguenti numeri: ottali: - 127 245 Esadecimali: - A034 C310 SISTEMI DI NUMERAZIONE Esercitazione 2 Esercizio 1 Svolgere le seguenti addizioni tra numeri binari: 101101 + 11101 1111111 + 1 10000000 + 10000000 10011011 + 111001 Esercizio 2 Svolgere le seguenti sottrazioni tra numeri binari: 1000000 – 1 111111 – 1110 1000011 – 1100 101101 - 10111 Esercizio 3 Svolgere i seguenti prodotti tra numeri binari: 1000011 x 1100 11111 x 1001 10001101 x 1010 Esercizio 4 Svolgere le seguenti operazioni nel sistema binario: 25 – 12 14 + 37 11 + 15 SISTEMI DI NUMERAZIONE Esercitazione 3 Esercizio 1 Convertire in binario i seguenti numeri decimali: 15.275 ; 18.25 ; 4.025 ; 3.0125; Esercizio 2 Convertire in decimale i seguenti numeri binari: 101.1101 ; 1101.0011 ; 11.1011;1011.1010 Esercizio 3 Svolgere le seguenti somme in notazione esponenziale: 0.1011 · 2 2 + 0.0001 · 2 2 0.1011· 2 1 + 0.0001· 2 2 0.1110 · 2 3 + 0.0010 · 2 2 Esercizio 4 Rappresentare i seguenti numeri decimali in virgola mobile: 14.5; 32; SISTEMI DI NUMERAZIONE ESERCIZI CONCLUSIVI E DI RIEPILOGO 1) Convertire in esadecimale ed ottale i seguenti numeri decimali: 236, 435, 8765, 65536, 64, 876 2) Convertire in binario i seguenti numeri decimali: 32, 54, 16, 48, 254, 123, 445 3) Convertire direttamente in binario i seguenti numeri ottali: 44, 75, 107, 447, 124 4) Convertire direttamente in binario i seguenti numeri esadecimali: A034, A042, F117, 56B2 5) Convertire direttamente prima in esadecimale e poi in ottale i seguenti numeri binari: 1000111100, 1110011, 1111111100, 110000011, 110010 6) Convertire in decimale i seguenti numeri binari: 11001, 111111, 1001100, 11000111, 1100110 7) Eseguire le seguenti somme in binario: 10000111+ 111001; 100001111011+1011000101 1000000+10000 10001100101+100001 8) Eseguire le seguenti sottrazioni in binario: 100001111-101100 10000101-11101 9) Scrivere in complemento ad 1 e poi in complemento a 2 i seguenti numeri binari 1000111100, 1110011, 1111111100, 110000011, 110010 10) Eseguire i seguenti prodotti tra numeri binari: 10001110x 101 100011110x100 11) eseguire in BCD le seguenti operazioni, correggendo eventualmente le stringhe che non compaiono corrette 23 + 42; 18 + 27; 23 + 39; 125 + 88 12) Svolgere le seguenti operazioni in esadecimale: A034 + C310; 2B2 + 1A; 198 – 25; A013 –25D
© Copyright 2024 ExpyDoc