Sistemi di numerazione 1
Sistemi di numerazione 2
Sistemi di numerazione I primi esempi di utilizzo di sistemi di numerazione risalgono al neolitico, ovvero a circa 50.000 anni fa. In epoca preistorica, le più utilizzate furono le basi 2, 5, 10, 20, 12, e 60 Mentre le basi 2, 5 10 e 20 sono suggerite dalla fisiologia umana, 12 e 60 sembrano suggerite da scopi utilitaristici: 12 è divisibile per 1, 2, 3, 4, 6 e 12 mentre 60 per 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30 e 60. Da notare che il 7 non compare mai nelle basi di numerazione e, in effetti, ebbe significati particolari, anche religiosi, presso i popoli antichi. La base 12 è ancora utilizzata in certe misure di tempo, 60 nella misurazione di angoli e tempo. 3
Sistemi di numerazione Tra le prime testimonianze certe dell utilizzo di concetti numerici avanzati vi sono le tavole numeriche babilonesi, elenchi di numeri utilizzati per calcoli astronomici e di agrimensura, risalenti al X secolo a.c. Tuttavia nelle culture dell antica Mesopotamia esistevano tabelle per le addizioni e le sottrazioni già durante il regno di Sargon I, intorno al 2350 a.c. Il documento più significativo dell antico Egitto è il papiro di Ahmes o Ahmose, dal nome dello scriba che lo compose nel 1650 a.c. Lo stesso Ahmes sostiene inoltre che il suo materiale è tratto da un documento anteriore, e fa risalire l originale ad Imhotep, medico e architetto del faraone Djoser della III dinastia, e quindi al 2650 a.c. circa 4
Sistemi di numerazione La matematica egizia utilizzava la base 10, ed impiegava simboli diversi per rappresentare le diverse potenze del 10, da 1 a 10 6. I geroglifici utilizzati erano: Pastoia per bestiame o giogo Bastoncino Rotolo di fune Ninfea o fiore di loto Uomo a braccia levate, simbolo del dio Heh Dito Girino o rana I numeri venivano formati raggruppando i simboli, generalmente posti in ordine dal più piccolo al più grande, da sinistra a destra (o viceversa) Il sistema di numerazione non è, tuttavia, posizionale. 5
Sistemi di numerazione 131.200 6
Sistemi di numerazione Nel sistema di numerazione romano, a base decimale, ci si serviva, come è noto, anche di simboli speciali per indicare 5, 50, 500 Alcune antiche epigrafi inducono a ritenere che i segni usati fossero inizialmente segni speciali, forse di origine etrusca, che solo successivamente furono identificati con le lettere I, V, X, L, C, D, M I V X L C D M 1 5 10 50 100 500 1000 7
Sistemi di numerazione La civiltà indiana, più antica delle civiltà classiche, è già documentata dal 3000 a.c. Sebbene l uso della matematica dovesse essere ben sviluppato già in epoca arcaica, i primi testi che ci sono giunti risalgono al V secolo d.c. Non è però ancora chiaro dove e quando si sia sviluppato il sistema di notazione decimale posizionale che, in seguito, attraverso gli Arabi, si è diffuso in Europa. L idea di usare un numero limitato di simboli a cui dare valore diverso a seconda della posizione occupata può essere stata, secondo alcuni studiosi, sviluppata dagli Indiani per conoscenza diretta o ereditata dai Greci del sistema sessagesimale babilonese Gli Indiani avrebbero allora iniziato ad utilizzare solamente i primi 9 simboli del loro sistema decimale in caratteri Brahmi, in uso dal III secolo a.c. 8
Sistemi di numerazione I simboli assumono forme diverse a seconda delle zone e dei periodi, ma sono comunque quelli che gli Arabi più tardi utilizzarono e che, dalla forma araba, sono passati in Europa, fino alla forma definitiva resa uniforme dalla stampa nel XV secolo. 9
Sistemi di numerazione posizionali I sistemi di numerazione posizionali si caratterizzano per: La base del sistema di numerazione Le cifre del sistema di numerazione Il numero è scritto specificando le cifre in ordine ed il suo valore dipende dalla posizione relativa delle cifre Esempio: Il sistema decimale (Base 10) Cifre : 0 1 2 3 4 5 6 7 8 9 5641 = 5 10 3 + 6 10 2 + 4 10 1 + 1 10 0 Posizione: 3 2 1 0 10
Sistemi di numerazione posizionali La base definisce il numero di cifre diverse nel sistema di numerazione. La cifra di minor valore è sempre lo 0. Le altre sono, nell ordine, 1, 2,, B 1. Se B > 10 occorre introdurre B 10 simboli in aggiunta alle cifre decimali. Un numero intero N si rappresenta con la scrittura (c n c n 1 c 2 c 1 c 0 ) B c n è la cifra più significativa, c 0 la meno significativa Un numero frazionario N si rappresenta come (0, c 1 c 2 c n ) B N = c 1 B 1 +c 2 B 2 +...+c n B n 11
Sistemi di numerazione posizionali Con n cifre in base B si rappresentano tutti i numeri interi positivi da 0 a B n 1 (B n numeri distinti) Esempio: base 10 Esempio: base 2 2 cifre: da 0 a 10 2 1 = 99 2 cifre: da 0 a 2 2 1 = 3 00 01 02. 98 99 00 01 10 11 10 2 = 100 valori 2 2 = 4 valori 12
Sistemi di numerazione posizionali La base 2 è la più piccola per un sistema di numerazione. Le cifre sono solo due: 0 e 1 (bit : binary digit ) Esempi: Forma polinomia (101101) 2 = 1 2 5 + 0 2 4 + 1 2 3 + 1 2 2 + 0 2 1 + 1 2 0 = 32 + 0 + 8 + 4 + 0 + 1 = (45) 10 (0,0101) 2 = 0 2 1 + 1 2 2 + 0 2 3 + 1 2 4 = 0 + 0,25 + 0 + 0,0625 = (0,3125) 10 (11,101) 2 = 1 2 1 + 1 2 0 + 1 2 1 + 0 2 2 + 1 2 3 = 2 + 1 + 0,5 + 0 + 0,125 = (3,625) 10 13
Sistemi di numerazione posizionali Un byte è un insieme di 8 bit (un numero binario a 8 cifre) Con un byte si rappresentano i numeri interi fra 0 e 2 8 1 255 b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 È l elemento base con cui si rappresentano i dati nei calcolatori 00000000 00000001 00000010 00000011. 11111110 11111111 2 8 = 256 valori distinti È l elemento base con cui si rappresentano i dati nei calcolatori Si utilizzano sempre dimensioni multiple (di potenze del 2) del byte: 2 byte (16 bit), 4 byte (32 bit), 8 byte (64 bit) 14
Sistemi di numerazione posizionali Ripasso: le ( principali ) potenze del 2 2 4 = 16 2 8 = 256 2 16 = 65536 2 10 = 1 024 ( K = Kilo) 2 20 = 1 048 576 (M = Mega) 2 30 = 1 073 741 824 (G = Giga) Molto utilizzati in Informatica ed in elettronica digitale sono: il Kilobyte (KB) = 2 10 byte = 1 024 byte il Megabyte (MB) = 2 20 byte = 1 048 576 byte il Gigabyte (GB) = 2 30 byte = 1 073 741 824 byte il Terabyte (TB) = 2 40 byte = 1 099 511 627 776 byte 15
Sistemi di numerazione conversione decimale binario Per convertire un numero INTERO da decimale a binario, si divide ripetutamente il numero decimale per 2 fino ad ottenere un quoziente nullo. Le cifre del numero binario sono i RESTI delle divisioni, essendo l ultimo resto la cifra più significativa. Esempio: convertire in binario (43) 10 43 : 2 = 21 + 1 21 : 2 = 10 + 1 10 : 2 = 5 + 0 5 : 2 = 2 + 1 2 : 2 = 1 + 0 1 : 2 = 0 + 1 bit meno significativo - Lsb resti bit più significativo - Msb (43) 10 = (101011) 2 16
Sistemi di numerazione conversione decimale binario Per convertire un numero FRAZIONARIO da base 10 a base 2, lo si moltiplica ripetutamente per 2, fino ad ottenere una parte decimale nulla o, dato che la condizione potrebbe non verificarsi mai, per un numero prefissato di volte. Le cifre del numero binario sono le parti intere dei prodotti successivi, mentre la cifra più significativa è il risultato della prima moltiplicazione. Esempio: convertire in binario (0,21875) 10 e (0,45) 10 Parti intere 0,21875 2 = 0,4375 0,4375 2 = 0,875 0,875 2 = 1,75 0,75 2 = 1,5 0,5 2 = 1,0 0,45 2 = 0,9 0,90 2 = 1,8 0,80 2 = 1,6 0,60 2 = 1,2 0,20 2 = 0,4 etc. (0,21875) 10 = (0,00111) 2 (0,45) 10 (0,01110) 2 17
Sistemi di numerazione conversione binario decimale Per convertire un numero INTERO da binario a decimale basta ricordare che un numero binario è un numero pesato, poiché il valore di ciascuna cifra dipende dalla posizione occupata nel numero. La conversione di un numero binario nel corrispondente decimale può essere quindi effettuata sommando i prodotti di ciascuno dei bit che lo compongono ed il rispettivo peso. (101011) 2 = 1 2 5 + 0 2 4 + 1 2 3 + 0 2 2 + 1 2 1 + 1 2 0 = (43) 10 pesi In un numero binario il bit più a destra è il meno significativo (LSB, Least Significant Bit) ed ha sempre un peso di 2 0 = 1. Il bit più a sinistra è il più significativo (MSB, Most Significant Bit) ed ha sempre un peso di 2 n-1 (n è il numero dei bit del numero binario). 18
Sistemi di numerazione codice esadecimale Il sistema esadecimale è un sistema a base 16: vi sono pertanto 16 cifre distinte. È molto importante poiché nei sistemi digitali spesso le elaborazioni avvengono su gruppi di 4 bit, rendendo il codice molto comodo da utilizzare, dal momento che ogni cifra esadecimale rappresenta un numero binario a 4 bit. Le cifre esadecimali sono : 0 1 2 3 4 5 6 7 8 9 A B C D E F e la corrispondenza con il codice binario è mostrata qui sotto. 0000 0 1000 8 0001 1 1001 9 0010 2 1010 A 0011 3 1011 B 0100 4 1100 C 0101 5 1101 D 0110 6 1110 E 0111 7 1111 F I numeri esadecimali sono composti da gruppi di cifre esadecimali scritte in sequenza. Sono, ad esempio, numeri esadecimali : A, 3B, 3AD2, ABCDE, C5B6F, ecc. 19
Sistemi di numerazione conversione binario esadecimale La conversione binario esadecimale è un procedimento semplice e veloce. Basta infatti suddividere il numero binario in gruppi di 4 bit, quindi sostituire ciascun gruppo con la corrispondente cifra esadecimale. Esempio Numero binario: 1101001011101001 gruppi di 4 bit 1101 0010 1110 1001 in decimale 13 2 14 9 ESADECIMALE D 2 E 9 Quindi 1101001011101001 2 = D2E9 16 20
Sistemi di numerazione conversione binario esadecimale Esempio 21
Sistemi di numerazione conversione esadecimale binario Anche la conversione esadecimale binario è un procedimento semplice e veloce: basta infatti invertire il procedimento appena visto, sostituendo cioè ad ogni cifra esadecimale il corrispondente gruppo di 4 bit. Esempio: convertire in binario il numero esadecimale 0x0C8F 0 C 8 F 0000 1100 1000 1111 Notazione usata in molti linguaggi di programmazione (es. C e Java) per rappresentare numeri esadecimali Il numero binario ha 4 4=16 bit Pertanto 0x0C8F = 0000110010001111 2 22
Sistemi di numerazione conversione esadecimale binario Esempio 23
Sistemi di numerazione conversione esadecimale decimale Un modo per trovare l equivalente decimale di un numero esadecimale è quello di convertire il numero esadecimale in binario convertire il numero binario in decimale Esempio 24
Sistemi di numerazione conversione esadecimale decimale Un altro modo per convertire in decimale un numero esadecimale è quello di moltiplicare il valore decimale di ogni cifra esadecimale per il suo peso, quindi sommare i prodotti ottenuti. Esempio 25
Sistemi di numerazione conversione decimale esadecimale Per convertire un numero INTERO da decimale ad esadecimale, si divide ripetutamente il numero decimale per 16 fino ad ottenere un quoziente nullo. BC 26
Sistemi di numerazione conversione decimale esadecimale Altro metodo per la conversione da decimale ad esadecimale. 27
Codice BCD 28
Codice BCD BCD sta per Binary Code Decimal. È un codice usato nelle tastiere, nei display ed in applicazioni elettroniche ed informatiche di vario tipo. Esso è utilizzato per rappresentare una singola cifra DECIMALE con il suo equivalente in binario. Dovendo la codifica rappresentare solo le cifre da 0 a 9, per ciascuna di queste sono necessari 4 bit (nibble). Ad esempio, il numero 234 in BCD sarà codificato così: 0010 0011 0100 2 3 4 (ogni cifra è rappresentata in codice binario) 29
Codice BCD È detto anche codice 8421 ed è un codice pesato, poiché ogni elemento del carattere, a partire da destra e procedendo verso sinistra, ha peso rispettivamente 1, 2, 4, 8. Ad esempio, 1101 BCD = 1*8 + 1*4 + 0*2 + 1*1 = 13 10 Altri esempi di codifiche in BCD: 379 10 = 0011 0111 1001 BCD 147 10 = 0001 0100 0111 BCD Attenzione! Osservare che 379 10 = 101111011 2 e 147 10 = 10010011 2 30
Codice BCD La tabella seguente mostra la corrispondenza Decimale BCD DEC BCD 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 Delle possibili combinazioni ottenibili con quattro bit, solamente dieci sono utilizzate. I restanti SEI caratteri possibili (1010, 1011, 1100, 1101, 1110, 1111) non hanno significato nel codice BCD. Per questo motivo tale codice è detto ridondante. 31
Codice BCD I numeri e le operazioni in questo codice, pur rispondendo alle normali regole aritmetiche, sono di difficile trattazione mnemonica, quando si eseguono operazioni di somma o sottrazione; vediamo il perché con un esempio. 5 + 0101 + 8 = 1000 = ---- --------- 13 1101 Utilizzando le normali regole della somma, il risultato è 1101; però tale valore non esiste in BCD (è infatti tra i caratteri privi di significato), mentre equivale al numero 13 in binario puro. Il valore 13 espresso in BCD è invece: 0001 0011. 32
Codice BCD La discordanza tra i due valori, dovuta alla ridondanza del codice, sta nel fatto che al risultato della somma in BCD, occorre aggiungere 6 10 = 0110 BCD ogni volta che viene superato il numero 9. Bisogna infatti saltare 6 posizioni per evitare i caratteri privi di significato in questo codice. Nel caso dell esempio precedente bisogna dunque correggere il risultato. Allo scopo va eseguita la seguente operazione: 1101 + (risultato precedente) 0110 = ---------------- 0001 0011 13 10 33
Codice BCD Questo accade tutte le volte che con la somma, nel sistema decimale, si ottiene un riporto, poiché in questo caso la cifra del risultato supera il nove. 35 + 0011 0101 + 5 = 0101 = ----- ---------------- 40 0011 1010 non valido in BCD! 0 0 1 1 1 0 1 0 + 0 1 1 0 = ----------------------- 0 1 0 0 0 0 0 0 = 40 BCD 34
Codice BCD Osservazione. Utilizzando i normali sistemi ad 8 bit, ovviamente ci troveremo ad avere i primi 4 bit inutilizzati; per convenzione, quindi, ogni cifra espressa in BCD avrà i primi 4 bit posti a zero (altri usano posti a uno), seguiti quindi dai 4 bit che codificano la cifra (8 sarà quindi codificato come 00001000, come avviene normalmente per codificare ad 8 bit un numero decimale). Dal momento che 4 bit vengono sprecati, a volte si utilizza la codifica packed BCD, ovvero vengono messe due cifre per ogni byte. Nella codifica packet BCD, inoltre, viene anche aggiunto alla fine un codice per indicare il segno del numero: 1100 per il + e 1101 per il -, il numero 248, quindi sarà rappresentato in packet BCD come: 00100100 10001100. 35
Codice a sette segmenti 36
Codice a sette segmenti È un codice utilizzato nei display per consentire la rappresentazione grafica delle 10 cifre decimali. 37
Codice a sette segmenti Tale codice può essere anche esteso alla rappresentazione degli ulteriori 6 simboli del codice esadecimale. 38
Codice a sette segmenti Impiega 7 bit (a, b, c, d, e, f, g ) per codificare i 10 ( o 16 ) simboli da rappresentare. a 1 a b c d e f g 0 1 1 0 0 0 0 f e g b c d a 9 a b c d e f g 1 1 1 1 0 1 1 f e g b c d 39
Codice a sette segmenti Qui sotto è mostrata la tabella di codifica delle 10 cifre decimali. Osserviamo che è possibile visualizzare anche il punto decimale (D.P.) 40
Display a sette segmenti I segmenti di un display possono illuminarsi in seguito all attivazione di diodi ad emissione di luce, denominati LED (Light Emitting Diode). La figura sotto mostra la disposizione dei diodi nel display; in genere vi è un LED per ciascun segmento. 41
Display a sette segmenti I display a LED possono essere di due tipi Anodo Comune (Common anode) 42
Display a sette segmenti Catodo Comune (Common cathode) 43
Display a sette segmenti Per pilotare i display a LED sono disponibili appositi circuiti integrati (decoder-driver ), sia per i dispositivi a catodo comune che per quelli ad anodo comune. Vi sono decoder sia per il codice BCD che per quello esadecimale. Anodo Comune Catodo Comune 44
Display a sette segmenti Simboli dei decoder BCD 7 segmenti per catodo ed anodo comune secondo lo standard IEEE 91-1984 Anodo Comune Catodo Comune 45
Display a sette segmenti Esempio di collegamento di un 7447 (TTL) con display ad anodo comune. Si osservi che sono necessari dei resistori, per la limitazione della corrente nei LED, da dimensionare in modo opportuno. 46
Display a sette segmenti La figura seguente mostra un circuito per il test di un decoder-driver CD4511 in tecnologia CMOS, per display a catodo comune. 47
Display a sette segmenti Un circuito integrato pilota per display a catodo comune molto noto è anche il tipo DM9368, di cui nella figura sotto è mostrato il pinout. Esso è un Decoder/Driver/Latch con uscite a corrente costante e non necessita perciò di resistori di limitazione. 48
Display a sette segmenti La figura seguente mostra l utilizzo del 9368 in un display a più digit. 49
Display a sette segmenti Importante peculiarità del decoder 9368 è la sua capacità di decodificare il codice esadecimale, come evidenziato dalla tabella di verità seguente. 50
Codice ASCII 51
Codice ASCII Il codice ASCII (si pronuncia askii in inglese) è nato in IBM nel 1961 e, proposto dall ANSI nel 1963, è diventato ufficiale nel 1968. ASCII sta per American Standard Code for Information Interchange. Esso è un sistema di codifica dei caratteri a 7 bit. Perciò gli elementi rappresentabili sono 2 7 = 128. Il codice ASCII standard prevede le cifre numeriche, le lettere maiuscole e minuscole, la punteggiatura, i simboli aritmetici e altri simboli ($, &, %, @, #, ecc.). 52
Codice ASCII Il codice originario a 7 bit è anche denominato US-ASCII, per differenziarlo dalle estensioni a 8 bit proposte in seguito per raddoppiare i caratteri codificabili. In questo codice i numeri decimali da 0 a 31 e il 127 corrispondono a caratteri non stampabili e sono riservati per segnali di controllo e funzioni varie (codici di controllo). I codici da 32 a 126 sono invece caratteri stampabili (il numero 32, in particolare, corrisponde al carattere "spazio". 53
Codice ASCII Extended ASCII. Alla specifica iniziale basata su codici di 7 bit, hanno fatto seguito negli anni molte proposte di estensione ad 8 bit, con lo scopo di raddoppiare il numero di caratteri rappresentabili. Nei PC IBM si fa per l'appunto uso di una di queste estensioni, ormai standard de facto, chiamata Extended ASCII o high ASCII. In questo ASCII esteso, i caratteri aggiunti sono vocali accentate, simboli semigrafici e altri simboli di uso meno comune, per un totale di 2 8 = 256 caratteri. 54
Codice ASCII Qui sotto sono mostrati alcuni caratteri e relativa codifica del codice ASCII. 55