ITI E Reggiani Medi Enrica 31/10/2010 NUMERI E CODICI SISTEMI DI NUMERAZIONE • Sistema posizionale e forma polinomiale del numero ll sistema decimale è quello più congeniale all’uomo; il sistema binario è alla base della rappresentazione dei numeri nel calcolatore e nei circuiti elettronici, che assumono solo due stati. Sistema di numerazione latino=non posizionale Alfabeto={I,V,X,L,C,D,M} I=1 II=2 III=3 IV=4 V=5… Numero= LXXXI (81) Ogni simbolo ha un proprio valore; in un numero ogni simbolo presenta un aumento o diminuzione di valore in base al fatto che si trovi prima o dopo un simbolo di valore maggiore. L=50 + X=10 -> 60 +X= 70 + X=80 +I =81 Ciò implica notevoli difficoltà nei calcoli In un sistema posizionale, ogni cifra assume un valore diverso a seconda della posizione che assume all’interno del numero. Infatti, ad esempio, i numeri 123 e 231 significano: 123= 1 centinaio- 2 decine- 3 unità 231= 2 centinaia- 3 decine- 1 unità dove: 1 decina= 10 unità 1 centinaio= 10 decine= 100 unità ecc. Nel nostro sistema decimale (e nei sistemi di numerazione moderni), esprimendo i seguenti numeri in forma polinomiale, avremo: 123= 1*102 + 2*101 + 3*100 231= 2*102 + 3*101 + 1*100 i simboli 1,2,3 hanno un peso diverso a seconda della posizione. Quindi DEFINIAMO: Sistema di numerazione= insieme finito di simboli (alfabeto) e regole Cifra= singolo simbolo dell’alfabeto Numero= sequenza di una o più cifre Base= numero degli elementi dell’alfabeto (deve essere base>1) Esempi: sistema decimale Alfabeto={0,1,2,3,4,5,6,7,8,9} Base=10 Numero=25410 (si usa esprimere la base accanto al numero) sistema binario Alfabeto={0,1} le cifre 0 e 1 sono dette bit (binary digit) Base=2 Numero=10110 Il numero 102 non è binario in quanto non usa i simboli del suo alfabeto Sistema ottale Alfabeto={0,1,2,3,4,5,6,7} Base=8 Numero=2548 Il numero 258 non è un numero nel sistema ottale numeri_codici 1 Enrica Reggiani 31/10/2010 ITI E Medi sistema esadecimale Alfabeto={0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F} dove si ha la seguente corrispondenza: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 Base=16 Numero=2F16 È possibile utilizzare qualsiasi sistema di numerazione (in base 3,4,5…) In Informatica si utilizza il sistema binario; si usano anche i sistemi ottale e esadecimale (in quanto 8 e 16 sono potenze di 2) che consentono di scrivere, con poche cifre, lunghi numeri binari. • Sistema sistemi di numerazione e conversioni di base CONVERSIONE DA DECIMALE A BINARIO Si divide il numero per la base 2 e si considerano i resti; la divisione si ferma quando il dividendo diventa minore del divisore. 1310 = 11012 13 2 1 6 2 0 3 2 1 1 si procede in modo analogo per le altre basi CONVERSIONE DA BINARIO A DECIMALE 11012 = 1*20 + 0*21 + 1*22 +1*23 = 1+4 +8 =13 si considerano le singole cifre del numero da destra verso sinistra; ogni singola cifre viene moltiplicata per la base 2 tenendo conto della posizione (elevata alla posizione). si procede in modo analogo per le altre basi. nel SISTEMA ESADECIMALE è necessario ricordare la corrispondenza tra i simboli dell’alfabeto e i valori decimali: simbolo {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} Valore decimale 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Quindi: 33110 = 14B16 331 16 11 (B) 20 16 4 1 Viceversa: 14B16 = B*160 + 4*161 + 1*162 = 11*1+ 64+ 256= 33110 per trasformare un numero da una base b1 a una base b2, si converte il numero base 10 alla base b2. tuttavia è possibile anche effettuare una conversione tabelle di conversione. Esempio: convertire il numero esadecimale 2A in binario prima lo converto in decimale: 2A16 = A*160 + 2*161 = 10 + 2*16= 10+32= 4210 poi converto il decimale in binario: 4210 = 1010102 numeri_codici dalla b1 alla base 10 e poi dalla diretta utilizzando opportune 42 2 0 21 2 1 10 2 0 5 2 1 2 2 0 1 2 ITI E Medi Enrica Reggiani 31/10/2010 OPPURE si utilizza la tabella: decimale binario esadecimale 0 0000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F Per convertire da binario a esadecimale: si raggruppano le cifre del numero binario e gruppi di 4 (aggiungendo bit 0 non significativi a sinistra) e si associano le singole cifre: 0010 1010 2 A per convertire da esadecimale a binario si sostituiscono e valori binari alle singole cifre e si tolgono gli 0 non significativi: 2 A 0010 1010 quindi 101010 • Operazioni binarie (somma –differenza) ATTENZIONE: La base del sistema di numerazione determina il modo in cui vengono “raggruppate” le unità Nel sistema decimale, la base 10 implica che: 10 unità=1 decina 10 decine= 1 centinaio ecc. valgono le seguenti regole: 9+1=10 (0 unità e 1 decina) 99+1=100 (0 unità, 0 decine, 1 centinaio)… quindi: 1 1 2 3 + 2 7 = 1 5 0 1 1 1 2 3 2 7 = 9 6 in modo analogo per la moltiplicazione e la divisione nel sistema binario due unità costituiscono un “ambo”… valgono le seguenti regole: 0+0=0 1+0=1 0+1=1 1+1=10 numeri_codici 3 ITI E Medi Enrica Reggiani 31/10/2010 quindi: 1 1 1 1 1 1 1 + 1 1 = 0 1 0 1 0 Si procede in modo analogo 0 1 1 1 = 1 0 per la moltiplicazione e la divisione. Tuttavia tutte le operazioni aritmetiche sono riconducibili alla somma (v. sotto), quindi è sufficiente saper eseguire le somme in binario. Infatti, dati due interi a e b: 1. per eseguire la differenza b-a (con a>b) es.7-4=3 4+1=5+1=6+1=7 somma 1 per 3 volte fino a raggiungere 7 2. per eseguire il prodotto a*b es. 2*3= 2+2+2=6 somma 2 per 3 volte 3. per eseguire il quoziente a/b es. 7/2= 2+2=4+2=6 somma 2 per 3 volte, quindi risulta 3 8/2=2+2=4+2=6+2=8 somma 2 per 4 volte, quindi risulta 4 RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE l’unita’ fondamentale di informazione e’ il bit, che non e’ sufficiente per codificare tutte le informazioni; quindi si usano dei multipli di bit: • con 4 bit è possibile codificare 24 =16 informazioni • con 8 bit (1 byte) e’ possibile codificare 28 =256 informazioni, ecc. Un insieme di byte costituisce la parola (word) che puo’ essere immaginata come una cella di memoria, cioe’ una locazione fisica in cui e’ possibile memorizzare le informazioni binarie. Ogni cella di memoria deve poter essere identificata univocamente, per potervi accedere senza essere confusa con le altre: deve quindi avere un proprio numero identificativo, l’indirizzo, che deve essere anch’esso memorizzato per poter recuperare le informazioni quando necessarie all’elaborazione. i multipli di bit sono: • 8 bit= 1 byte • 1024 byte (210 byte)= 1 kilobyte (Kb) • 1024 Kb = 1 Megabyte (Mb) • 1024 Mb = 1 Gigabyte (Gb) • 1024 Gb = 1 Terabyte (Tb) La memoria e’ quindi caratterizzata dai seguenti parametri: • dimensione della parola: numero di byte che costituiscono la parola (attualmente gli elaboratori usano parole 4 byte (32 bit) o 8 (64 bit) • dimensione complessiva della memoria: un personal computer oggi ha una memoria complessiva che va da un minimo di 1 GB e oltre • velocita’ con cui risponde alle richieste • modalita’ di accesso (lettura e/o scrittura) e natura di permanenza o volatilita’: si distingue tra ROM e RAM; la memoria centrale deve contenere dispositivi di entrambi i tipo: RAM (radom access memory): per poter leggere informazioni e scriverne di nuove (quindi e’ memoria di lettura/scrittura); questi dispositivi sono subordinati al passaggio della corrente elettrica, quindi se la macchina viene spenta il suo contenuto viene perso: e’ memoria volatile ROM (read only memory): memorie di sola lettura, meno costose delle RAM, necessarie per memorizzare informazioni in modo permanente (ad esempio in fase di accensione e avvio del sistema, quelle relative al bootstrap (caricamento del SO)); sono quindi memorie permanenti. numeri_codici 4 ITI E Medi Enrica Reggiani 31/10/2010 la memorizzazione delle informazioni nel sistema di calcolo avviene in modo diverso a seconda che si tratti di numeri o caratteri. • La rappresentazione dei numeri interi I numeri interi, dotati di segno e modulo, possono essere rappresentati: Con modulo e segno In complemento a 2 In generale numeri naturali sono rappresentati, all’interno dei sistemi di calcolo, in binario con formato fisso: quindi se il numero necessita di un numero di bit inferiori a quello fornito dal formato, le posizioni di bit non utilizzate sono riempite con 0 non significativi. I formati più diffusi sono: • Byte (o octect= 8 bit) • Word (parola= 16 bit= 2 byte) • Long word (32 bit= 4 byte) Per semplicità utilizziamo un formato fisso a 4 bit (semibyte o nibble): questo non è reale ma serve per semplificare il discorso … … … … Quindi per esprimere il numero 3, equivalente al binario 112, avremo: 0 0 1 1 RAPPRESENTAZIONE CON MODULO E SEGNO In questo caso per memorizzare un numero intero con segno occorrono 4 bit: il primo bit serve per il segno: i numeri positivi hanno il bit di segno 0 i numeri negativi hanno il bit di segno 1 i restanti 3 bit servono per rappresentare il numero. Quindi il numero +3 viene rappresentato con 0011; il numero –3 viene rappresentato con 1011 Poiche’ il primo bit serve per il segno, restano 3 caselle libere che possono essere occupate in 23 = 8 modi diversi (per esprimere i moduli da 0 a 7, cioè i numeri da –7 a +7). Quindi esiste uno zero positivo (0000) e uno zero negativo 1000!. In questo caso se si vuole rappresentare un numero superiore a +7 (23-1) si ha un overflow, cioè la dimensione del numero eccede il formato e si perde la cifra più significativa del numero (quindi il numero perde il suo significato); analogamente se si rappresenta un numero inferiore a –7, si ha un underflow. segno 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 modulo 111 110 101 100 011 010 001 000 000 001 010 011 100 101 110 111 Numero decimale +7 +6 +5 +4 +3 +2 +1 +0 -0 -1 -2 -3 -4 -5 -6 -7 Inoltre osserviamo che la somma tra due numeri opposti non è 0; infatti +7-7=0 ma in binario usiamo: 0111+1111= 10110 che eccede il formato (overflow) con perdita della cifra più significativa; otteniamo 0110 che equivale al decimale 6! NOTA: analoghe considerazione vanno fatte in caso si utilizzino formati a 16 bit, ecc. Quindi per rappresentare i numeri negativi non si puo’ usare la stessa codifica perche’ altrimenti la somma di due numeri opposti non darebbe 0. Si ricorre alla regola del complemento a due. numeri_codici 5 EnricaE Reggiani ITI Medi 31/10/2010 RAPPRESENTAZIONE IN COMPLEMENTO A DUE Definiamo complemento di un numero K di x cifre rispetto ad una base B, il numero Kc ottenuto con la formula: Kc= Bx-K Esempio se K=23810 il suo complemento a 10 è Kc= 103-238= 1000-238 =762 Esiste un metodo pratico per ottenere il complemento del numero rispetto alla base B: si complementano le singole cifre del numero alla base –1 e si aggiunge 1: numero 2 3 8 7 6 1 + 1 = complemento 7 6 2 Analogamente per ottenere il complemento a 2 di un numero binario si calcola il complemento a 1 (2-1) di ogni cifra e si aggiunge 1; in pratica si invertono tutti i bit del numero e si aggiunge 1 (+710) 0 1 1 1 1 0 0 0 + 1 1 0 0 1 Per rappresentare i numeri interi binari con segno si adottano le seguenti CONVENZIONI: • I numeri positivi hanno come bit di segno 0 e come modulo la conversione binaria (rappresentazione con modulo e segno) • I numeri negativi hanno come bit di segno 1 e sono rappresentati in complemento a 2 In questo modo la somma di due numeri opposti è uguale a zero (a meno del riporto che va in overflow); nell’esempio visto sopra infatti avremo, nel numero +7 + binario ottenuto, un riporto di 1 che eccede il formato e quindi va perso; il -7 = risultato di 0111+1001 è 0000. 0 1 del numero 1 1 1 0 1 1 1 + 1 0 0 1 = 0 0 0 0 • La rappresentazione dei numeri reali Per rappresentare qualunque numero non intero (cioe’ reale) si possono usare due modi diversi: La notazione in virgola fissa (es.+3.54 -34.5 +34.0 …) La notazione in virgola mobile o floating point (es.+1.354. 10+3, +0.0354.10-2 notazione scientifica , oppure: 0.354E+1, 0.0354E+2 notazione esponenziale). Quando i numeri sono molto grandi o molto piccoli o hanno molte cifre decimali la loro rappresentazione è difficoltosa con la notazione in virgola fissa e si preferisce la notazione floating point. Nella notazione scientifica rileviamo 3 parti: il segno (+/-), la matissa (1.354) e l’esponente o caratteristica (+3). Di solito viene utilizzata la notazione normalizzata: la parte intera del numero e’ 0 e la prima cifra decimale e’ diversa da zero; quindi +1.354. 10+3 diventa +0.1354. 10+4. Ogni sistema di elaborazione ha una propria modalita’ di rappresentazione dei numeri reali, ma in genere vengono utilizzati 4 byte (cioe’ 32 bit): il primo bit serve per il segno dell’esponente, i bit dal secondo all’ottavo memorizzano il valore dell’esponente, i bit dal nono al trentaduesimo contengono il valore della mantissa. S esponente matissa 1 bit 8 bit 23 bit La rappresentazione di tali numeri nella memoria dell’elaboratore subisce una limitazione dovuta alle dimensioni fisiche della cella di memoria (4 byte oppure 8 byte ecc.), che riduce e approssima le cifre significative del numero (cio’ avviene anche nelle normali calcolatrici): si parla di precisione semplice quando i reali sono rappresentati utilizzando celle di 4 byte, di precisione doppia quando si utilizzano 8 byte. Per la conversione da binario a decimale si opera in modo analogo alla conversione degli interi: 10.12= 0*20 + 1*21 + 1*2-1 = 2.5 numeri_codici 6 ITI E Medi Enrica Reggiani 31/10/2010 per convertire da decimale a binario: - per la parte intera ci si comporta come per i numeri interi - per la parte decimale si procede in questo modo: si moltiplica per 2 la parte frazionaria; dal risultato si toglie la parte intera e si ripete fino a quando la parte frazionaria diventa 0 o si ottiene un numero di cifre adeguato per esprimere la precisione esempio: converto il decimale 5.6572 la parte intera 5 diventa 101 per la parte frazionaria: frazione prodotto Parte intera 0.6572*2= 1.3144 1 0.3144*2= 0.6288 0 0.6288*2= 1.2576 1 0.2576*2= 0.5152 0 …. Quindi otteniamo 101.1010 CODIFICA DEI DATI • Dati e bit I dati possono essere classificati in: • numerici • alfanumerici nell’elaboratore tutte i dati sono rappresentati attraverso sequenze di bit 0 e 1 in quanto la memoria della macchina è in grado di gestire solo due stati (passaggio di corrente/ non passaggio di corrente). Il processo attraverso il quale si fa corrispondere ad un dato una sequenza di bit è detto “codifica”. Con 1 bit, che può assumere valori 0 e 1, possiamo rappresentare 2 dati; con 2 bit possiamo rappresentare 22 = 4 dati; con 3 bit possiamo rappresentare 23 = 8 dati, ecc. n° di bit 1 2 3 simboli rappresentabili 0 1 00 01 10 11 000 001 010 011 100 101 110 111 …. n n° di simboli diversi 2 (=21) 4 (=22) 8 (=23) 2n Quindi possiamo anche chiederci quanti bit ci servono per rappresentare m dati diversi. È necessario determinare il numero n tale che 2n>=m Se dobbiamo rappresentare 10 dati diversi (ad esempio le cifre ‘0’, ‘1’, ‘2’,…’9’) ci servono n bit in modo che 2n>=9; con n=3 possiamo rappresentare solo 8 dati diversi, con n=4 possiamo rappresentare 16 dati diversi; quindi abbiamo bisogno di 4 bit; alcune sequenza di bit non sono utilizzate, ma con solo 3 bit non saremmo riusciti a rappresentare tutti i dati. Esistono diversi tipi di codici per rappresentare i dati numerici e i dati alfanumerici; si parla quindi di CODICI NUMERICI (tra cui il codice BCD, il codice Gray, il codice Eccesso 3, il codice Aiken…) e CODICI ALFANUMERICI (tra cui il codice ASCII, il codice EBCDIC, il codice ISO 8859, il codice UNICODE…) numeri_codici 7 ITI E Medi Enrica Reggiani 31/10/2010 • Codici binari Per definire un codice è necessario definire: il suo alfabeto; nel caso degli elaboratori utilizziamo codici binari il cui alfabeto è costituito dai simboli {0,1} la lunghezza delle parole, cioè delle sequenza di bit (come visto sopra) la lunghezza minima della parola deve essere tale da codificare in modo non ambiguo gli elementi dell’insieme. Un codice è ambiguo quando una parola corrisponde a più dati da codificare (come nella lingua parlata), cioè quando la lunghezza delle sue parole è inferiore alla lunghezza minima. Un codice è efficiente quando la lunghezza delle sue parole è uguale alla lunghezza minima. Un codice è ridondante quando la lunghezza delle sue parole è superiore alla lunghezza minima. Consideriamo alcuni esempi di codici sopra citati. I codici possono essere: • numerici, per rappresentare i numeri composti da cifre • alfanumerici, per rappresentare stringhe composte da una successione di caratteri alfabetici, caratteri speciali (es. @, #, ?,’,,;…), e numeri trattati come lettere (su cui non vengono effettuati calcoli: es. un numero di telefono, i numeri di un codice fiscale, ecc). CODICE BCD (BINARY-CODED DECIMAL): è un codice numerico efficiente che consente di rappresentare ogni cifra numerica decimale per mezzo di 4 bit DECIMALE 0 1 2 3 4 5 6 7 8 9 BCD 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 9 2 La codifica in BCD di un numero in base 10 avviene cifra per cifra; per 6 0110 1001 0010 esempio, dato il numero 692, la sua codifica è: Viceversa il numero binario 1000 0011 0000 corrisponde al decimale 830. Questo codice offre il vantaggio di consentire una veloce conversione binario- decimale e viceversa in modo veloce, senza effettuare calcoli come visto in precedenza. Gli svantaggi sono: - utilizza più bit per codificare un numero da decimale a binario rispetto al binario puro; infatti il numero 10 in BCD è 0001 0000, mentre in binario puro è 1010 - la somma è la sottrazione sono più complesse CODICE ASCII (American Standard Code for Information Interchange): è un codice alfanumerico efficiente a 7 bit; quindi consente di codificare 27 =128 simboli diversi (tra cui cifre numeriche, caratteri maiuscoli e minuscoli, punteggiatura, simboli aritmetici e altri simboli quali & @ #…); 128 simboli sono sufficienti a consentire la codifica dei simboli dell’alfabeto latino (ma non consente di rappresentare le lettere accentate). Non tutti i caratteri sono stampabili e sono caratteri di trasmissione (su reti di telecomunicazione), di formato (sui supporti di input/output) e ausiliari. Ad esempio il decimale 4= ascii eot (end of transmission) indica fine trasmissione, il decimale 13= ascii cr (carriage return) indica un ritorno a capo, il decimale 7= ascii bel indica l’emissione di un suono. Osservando la tabella si può notare che le cifre numeriche ‘0’, ‘1’, …, ‘9’ sono codificate con i valori decimali 48, 49, …57; questo significa che per convertire una cifra numerica in numero intero basta togliere 48 al codice di ogni carattere. Si nota inoltre che che i caratteri maiuscoli precedono quelli minuscoli (hanno valore decimale inferiore); tra un carattere alfabetico maiuscolo e uno minuscolo c’è una differenza di 32, quindi per trasformare un carattere da minuscolo al corrispondente maiuscolo è sufficiente sottrarre 32 (viceversa aggiungo 32 per passare da maiuscolo a minuscolo): se ‘a’ -> 97 e ‘A’-> 65 97-32=65 cioè ‘A’ numeri_codici 8 ITIEnrica E Medi Reggiani 31/10/2010 DECIMALE ASCII DECIMALE ASCII DECIMALE ASCII DECIMALE ASCII 0 nul 1 4 eot 5 8 bs 12 soh 2 stx 3 etx enq 6 ack 7 bel 9 ht 10 lf 11 vt ff 13 cr 14 so 15 si 16 dle 17 dc1 18 dc2 19 dc3 20 dc4 21 nak 22 syn 23 etb 24 can 25 em 26 sub 27 esc 28 fs 29 gs 30 rs 31 us 32 blank 33 ! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 127 del esiste anche la versione del codice ASCII a 8 bit, detto ASCII esteso, che consente di rappresentare 256 caratteri; quindi permette di rappresentare simboli grafici, tra cui le lettere accentate, e caratteri appartenenti alle diverse lingue. CODICE UNICODE (definito dalla Unicode Consortium e International Organization for Standardization): rappresenta i caratteri utilizzando 2 byte, cioè 16 bit; quindi garantisce 216 = 65536 simboli; in questo modo è possibile rappresentare tutte le varianti dell’alfabeto latino (comprese le lettere accentate e con simboli particolari) ma anche tutti gli altri alfabeti. I primi 256 caratteri corrispondono a quelli del codice Ascii. numeri_codici 9