I sistemi di numerazione Breve storia dei sistemi di numerazione. Probabilmente l’uomo primitivo per contare gli animali e gli oggetti usava le dieci dita delle mani e, una volta abbassate tutte, tracciava a terra o su una pietra un segno che, chiaramente, rappresentava una decina. Nasceva così il sistema di numerazione decimale. Se usava le dita di una sola mano, ogni segno rappresentava una cinquina e, di conseguenza, il sistema di numerazione era il quinario. Se oltre alle dita delle mani usava anche quelle dei piedi, al segno da lui tracciato corrispondeva una ventina e, di conseguenza, il sistema di numerazione era il bidecimale o vigesimale, usato dai Celti e dai Maya. Infine, se usava solo le due mani, senza tener conto delle dita, per contare le coppie, veniva fuori il sistema binario. In seguito, nascendo l’esigenza dei calcoli, venivano usati gli abachi, tavolette divise in colonne su cui veniva stesa cera o sabbia (abaq in ebraico significa polvere) sulle quali si incidevano i numeri oppure si mettevano i sassolini (dal latino calculi). Gli Indiani modificarono gli abachi, introducendo, fra l’altro, un simbolo per indicare il vuoto. A quest’ultimo simbolo, che indicava la colonna priva di numeri nell’abaco, venne assegnato il nome di Sifr (deformato in seguito in zephyrum, poi in severo e quindi in zero), dallo studioso arabo Al-Khuwarismi, da cui deriva il termine algoritmo, (procedimento di calcolo) in un suo libro che inizia con le parole kitab-algiabr , da cui il termine algebra. Sistemi di numerazione Un sistema di numerazione è un insieme finito di simboli e di regole che fanno corrispondere un significato numerico univoco ad ogni scrittura costruita con dei simboli o cifre, con delle regole assegnate che esprimono le modalità per rappresentare il numero come sequenze di cifre e con delle relazioni che permettono di effettuare le operazioni tra i numeri. 1 Il numero dei simboli presente in un sistema di numerazione è detto base del sistema. Normalmente vengono usati sistemi di numerazione a base fissa con rappresentazione posizionale in cui, cioè, le cifre assumono un valore ben preciso a seconda della posizione occupata nel numero. Per esempio nel sistema decimale i due numeri 547 e 754, pur essendo formati dalle stesse cifre hanno valore diverso, infatti: 547 = 5 × 10 2 + 4 × 101 + 7 × 10 0 754 = 7 × 10 2 + 5 × 101 + 4 × 10 0 e come si vede, il valore delle loro cifre dipende dal posto da esse occupato all’interno del numero. In generale, un numero a base fissa B, con B>1, è costituito da un insieme ordinato di B simboli che rappresentano i numeri a partire da zero fino al numero precedente la base. In tale base ogni numero > B viene rappresentato con una sequenza di simboli AnAn-1……..A1A0 a cui viene attribuito il seguente significato: AnAn-1……..A1A0 = AnBn + An-1Bn-1 + .......... + A1B1 + A0B0 (1) In cui An; An-1; ……. A1; A0 sono elementi appartenenti all’insieme dei B simboli. Se il numero di uno viene rappresentato nel seguente modo: 0, A0A1A2……..An-1 = A0B-1 + A1B-2 +.........+ An-1B-n. (2) La base B viene rappresentata da 10, che nel sistema decimale rappresenta il dieci. In generale l’espressione polinomiale che rappresenta il numero N in un sistema di numerazione posizionale a base fissa è: N= n åA B i i =- m i ; A i £ B - 1 dove -m £ i £ n In informatica i sistemi di numerazione a base fissa più usati sono il decimale, il binario, l’ottale e l’esadecimale. Il sistema di numerazione decimale. Il sistema di numerazione decimale è un sistema di tipo posizionale ed è costituito da un insieme ordinato di dieci simboli 0; 1; 2; 3; 4; 5; 6; 7; 8; 9. Poiché è un sistema posizionale ogni numero espresso in questo sistema è composto da più 2 cifre affiancate ciascuna delle quali ha peso diverso a seconda della posizione che occupa. Il peso di ciascuna cifra è espresso da una potenza che ha per base la base del sistema, e nel nostro caso 10, e per esponente la posizione della cifra rispetto alla prima cifra di destra che ha posizione 0. Quindi il valore associato a ciascuna cifra è dato dal prodotto del peso per il numero della cifra e il valore associato al numero è dato dalla somma del valore di ciascuna cifra. Le regole che consentono di effettuare le addizioni aritmetiche fondamentali tra due numeri quali l’addizione, la sottrazione, la divisione e la moltiplicazione li conosciamo abbastanza bene, queste stesse regole valgono in qualsiasi sistema di numerazione in quanto le operazioni aritmetiche sono invarianti rispetto alla base del sistema di numerazione. Il sistema di numerazione binario Se il sistema di numerazione deve essere utilizzato in un calcolatore elettronico, poiché in esso i circuiti che realizzano le operazioni sono circuiti digitali, descritti, cioè, da segnali che possono assumere due solo stati distinti, è necessario che nel sistema di numerazione utilizzato i simboli siano solo due e ciò richiede che la sua base sia 2, cioè base minima. Si passa così al sistema di numerazione binario. Esso è un sistema posizionale, ha base 2 e i suoi simboli sono 0 e 1. Questi due elementi fondamentali della numerazione binaria vengono chiamati bit (binary digit). Spesso si usano parole di 4 bit (nibble) o di 8 bit (byte). Esempio: 1010 è 1 nibble 1101 1011 sono 2 nibble cioè 1byte Sussiste la seguente relazione: 1 byte = 2 nibble = 8 bit 3 La cifra di peso inferiore, cioè quella più a destra, si chiama cifra meno significativa LSB (Least Significant Bit) , mentre quella di peso maggiore, cioè quella più a sinistra, cifra più significativa MSB (Most Significant Bit). Il sistema di numerazione ottale Il sistema di numerazione a base 8 od ottale è un sistema di tipo posizionale ed è costituito da un insieme ordinato di otto simboli 0; 1; 2; 3; 4; 5; 6; 7. Il sistema di numerazione esadecimale Il sistema di numerazione a base 16 o esadecimale è un sistema di tipo posizionale ed è costituito da un insieme ordinato di sedici simboli 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; A; B; C; D; E; F quindi, come si vede, per la sua rappresentazione utilizza caratteri alfanumerici. Conversione di un numero da base B a base 10 Ricordando che un numero in base B è rappresentato da una sequenza di cifre del tipo: AnAn-1……..A1A0 con 0 < Aj < B e che il sistema di numerazione, oggetto del nostro studio, è di tipo posizionale, il numero decimale N(10) può essere scritto come: N(10) = AnBn + An-1Bn-1 + .......... + A1B1 + A0B0 Vediamo alcuni esempi: Convertire in base 10 il numero 11010(2) 4 11010( 2 ) = 1 × 2 4 + 1 × 2 3 + 0 × 2 2 + 1 × 21 + 0 × 20 = 26(10) Convertire in base 10 il numero10101(2) 10101 = 1 × 2 4 + 0 × 2 3 + 1 × 2 2 + 0 × 21 × 1 × 2 0 = 21(10) Come si vede, dai due esempi riportati, se nel numero binario il bit meno significativo è 0, il corrispondente numero decimale è pari se, invece, il bit meno significativo è 1, il corrispondente numero decimale è dispari. Convertire in base 10 il numero 467(8) 4 × 82 + 6 × 81 + 7 × 80 = 567 (10 ) Convertire in base 10 il numero A4C(16) 10 × 16 2 + 4 × 161 + 12 × 16 0 = 2636 Se il numero non è intero, bisogna tener conto della (1) e della (2). Esempi: Convertire in base 10 il numero 110,11(2) 1 × 2 2 + 1 × 21 + 0 × 2 0 + 1 × 2 -1 + 1 × 2 - 2 = 6 + 1 1 27 + = = 6,75 2 4 4 Convertire in base 10 il numero 146,72(8) 1 × 82 + 4 × 81 + 6 × 80 + 7 × 8 -1 + 2 × 8- 2 = 102 + 7 2 6586 + = = 102,90625(10) 8 64 64 5 Convertire in base 10 il numero 4C,1A(16) 4 × 161 + 12 × 16 0 + 1 × 16 -1 + 10 × 16 -2 = 76 + 1 10 19482 9471 + 2 = = 16 16 256 128 Conversione di un numero da base 10 a base B. Se il numero decimale è intero positivo per convertirlo ad una base qualunque B si usa il metodo delle divisioni successive cioè: q Si divide il numero decimale N10 per la base B; q Si otterrà un quoziente Q0 ed un resto R0. Il resto R0 sarà la cifra meno significativa del numero cercato. q Si divide il quoziente Q0 ancora per B; si otterrà un nuovo quoziente Q1 e un resto R1. q Questo procedimento verrà continuato finché Q non sarà zero. A questo punto il numero in base B si ottiene posizionando ordinatamente i resti con R0 cifra meno significativa e Rn cifra più significativa, cioè: RnRn-1……..Rj………R2R1R0 (B) Vediamo degli esempi: Convertire 23(10) in base 2: Dividendo Divisore Quoziente Resto 23 :2 11 1 11 :2 5 1 5 :2 2 1 2 :2 1 0 1 :2 0 1 Quindi si ottiene: 10111(2) 6 Convertire 327(10) in base 8 Dividendo Divisore Quoziente Resto 327 40 5 :8 :8 :8 40 5 0 7 0 5 Si ottiene, pertanto: 507(8) Convertire 876(10) in base 16 Dividendo Divisore Quoziente Resto 876 54 3 :16 :16 :16 54 3 0 12 6 3 Si ottiene, quindi: 36C(16) Tutto il discorso precedente vale, come abbiamo detto, solo se il numero decimale è un numero intero positivo. Se il numero decimale da convertire è un numero frazionario positivo minore di 1, per convertirlo in un numero in base B bisogna eseguire i seguenti passi: Ø Si moltiplica il numero in base 10 N(10) per la base B, si otterrà un numero M0. La parte intera di questo numero I0 sarà il numero più significativo dopo la virgola del numero cercato. Ø Si esegue la differenza M0 – I0. Il risultato, che sarà di nuovo un numero frazionario, si moltiplica per la base B ottenendo un numero M1. La parte intera di questo numero I1 sarà la seconda cifra frazionaria. Ø Si continuerà ancora come nel punto precedente fino ad ottenere un numero M intero, quest’ultimo sarà l’ultima cifra o la cifra meno significativa del numero cercato e il processo verrà interrotto. 7 Se M non risulta mai intero, allora il processo sarà interrotto quando si è raggiunta la precisione richiesta. Esempi: Convertire in base 2 il numero 0,8125(10) N(10) Fattore M I 0.8125 0.625 0.25 0.50 *2 *2 *2 *2 1.625 1.25 0.50 1.00 1 1 0 1 Si ottiene, quindi: 0,1101(2) Convertire in base 8 il numero 0,283203125(10) N(10) Fattore M I 0.283203125 *8 2,265625 2 0.265625 0.125 *8 *8 2,125 1,00 2 1 Pertanto si ha: 0,221(8) Convertire in base 16 il numero 0,283203125(10) N(10) Fattore M I 0,283203125 *16 4,53125 4 0,53125 0,5 *16 *16 8,5 8,00 8 8 Si ha quindi: 0,488(16) 8 Se il numero decimale da convertire è un numero frazionario positivo maggiore di 1, bisogna separare la parte intera dalla parte frazionaria e poi convertire separatamente i due numeri ottenuti. Esempio: Convertire in binario il seguente numero decimale: 23(10) che convertito in binario è: 23,8125(10) la parte intera è 10111(2); la parte frazionaria è 0,8125(10) che convertita in binario è: 0,1101(2). Pertanto il numero 23,8125(10) convertito in binario sarà: 10111,1101. Alla stesso modo si ragiona per convertire un qualsiasi numero decimale frazionario positivo maggiore di 1 sia in base 8 che in base 16. Conversione di un numero da base B1 a B2. Per convertire un numero da base B1 a base B2, conviene usare una base intermedia, generalmente si usa la base 10. Dalla se B1 il numero viene convertito in base 10 e, successivamente, dalla base 10 alla base B2. Il passaggio dalla base 2 alla base 8=23 risulta abbastanza semplice. Si scompone il numero binario in gruppi di tre cifre a partire da quella meno significativa e sostituendo ad ogni gruppo il corrispondente numero ottale. Esempio: Convertire in ottale il seguente numero binario: 10101011111(2). Viene scomposto in gruppi di tre cifre il numero binario: 10 101 011 111 e, pertanto, si ha: 2537(8). 9 Altrettanto semplice risulta il passaggio dalla base 2 alla base 16=24. Si scompone il numero binario in gruppi di quattro cifre a partire da quella meno significativa e sostituendo ad ogni gruppo il corrispondente numero esadecimale. Esempio: Convertire in esadecimale il seguente numero binario: 1110101011111(2). Viene scomposto in gruppi di quattro cifre il numero binario: 1 1101 0101 1111 e, pertanto, si ha: 1D5F(16). Procedimento inverso si usa per passare dalla base 8 alla base 2. Ad ogni numero nel sistema ottale si fa corrispondere un numero binario composto da tre bit. Esempio: Convertire in binario il seguente numero: 573(8) si ha : 101111011(2) . Stesso procedimento viene seguito per passare dalla base 16 alla base 2. Ad ogni numero nel sistema esadecimale si fa corrispondere un numero binario composto da quattro bit. Esempio: Convertire in binario il seguente numero: 8A5C(16) si ha: 1000101001011100(2). Operazioni aritmetiche con i numeri binari Le regole utilizzate per le operazioni di addizione, sottrazione, moltiplicazione e divisione non dipendono dalla base del sistema di numerazione utilizzato, cioè sono invarianti rispetto alla base del sistema. Somma di numeri binari Nell’eseguire la somma fra due numeri binari bisogna tener conto delle seguenti relazioni: 10 0+0=0 1+0=1 0+1=1 1 + 1 = 0 con il riporto (R) di 1; questa operazione altro non è che 1+1=10(2)=2(10). Esempio: Sommare i due numeri binari: 1010(2) ; 1011(2). 1R 1010(2) + 1011(2) = 10101(2) Verifica 10(10)+ 11(10)= 21(10) Sottrazione di due numeri binari Nell’eseguire la somma fra due numeri binari bisogna tener conto delle seguenti relazioni: 0-0=0 1-0=1 0 - 1 = 1 con il prestito (P) di 1 1-1= 0 Esempio: Sottrarre da 1000110(2) il numero 1101(2): 1P1 P 1P 1 0 0 0 0 0 0 1 0 1 1 1 1P 1 1 0(2) – 1 0 1(2) = 0 0 1(2) verifica 70(10) 13(10) = 57(10) 11 Rappresentazione in modulo e segno dei numeri binari I numeri del sistema binario possono essere rappresentati in modulo e segno. Per rappresentare il segno viene utilizzato il bit più significativo (MSB), mentre gli altri bit rappresentano il modulo. Se il bit più significativo è zero, il segno è positivo; se è 1 il segno è negativo. Per formato di un numero si intende il numero il numero di cifre utilizzate per rappresentarlo. Se un numero rappresentato in modulo e segno ha formato 8, significa che l’MSB rappresenta il segno mentre i rimanenti sette bit rappresentano il modulo. Complemento a 2 di un numero binario Il metodo del complemento a 2 viene utilizzata nei calcolatori perché con esso l’operazione di sottrazione è sostituita dall’operazione di addizione. Per eseguire il complemento a due di un numero binario prima si calcola il complemento a 1 del numero sostituendo ogni suo bit di valore 1 con un bit di valore zero ed ogni suo bit di valore zero con un bit di valore 1, al risultato viene aggiunto 1. Ad esempio se si ha il numero 101101001, il suo complemento a 1 è 010010110 per ottenere il complemento a 2 bisogna aggiungere a 1 al complemento a 1, cioè: 010010110 + 1 = 010010111. Sottrazione fra due numeri binari col metodo del complemento a 2. Per eseguire la sottrazione fra due numeri binari col metodo del complemento a due, si ricava il complemento a 2 del sottraendo e poi si somma il minuendo con il 12 complemento a due del sottraendo trascurando l’eventuale riporto dell’ultima cifra. S supponga di dover sottrarre dal numero 11101(2) il numero 01110(2). Il complemento a 1 del sottraendo è : 10001 e quindi il complemento a 2 è 10001+1= 10010 si somma ora il minuendo con il complemento a 2 ottenuto si ha: 1 1 1 0 1(2) + 1 0 0 1 0(2) = 101111 Il riporto 1 viene trascurato, quindi il risultato della differenza fra i due numeri dati è : 01111. Moltiplicazione fra due numeri binari. Nell’eseguire la moltiplicazione fra due numeri binari bisogna tener conto delle seguenti relazioni: 0x0=0 1x0=0 0x1=0 1x1= 1 Esempio: Moltiplicare i due numeri binari 1101(2) e 11(2). 1101(2) x 11(2)= 1101 1101 100111(2) 13 La divisione fra due numeri binari La divisione fra due numeri binari segue lo stesso schema della divisione nel sistema decimale. Esempio: Dividere il numero 1111(2) per il numero 11(2). 11 11 11 11 101 0 11 11 0 Il risultato della divisione è: 101(2) 14 Somma e Sottrazione nel sistema Ottale Eseguiamo, ora, alcune semplici operazioni di somma e sottrazione nel sistema ottale. Prima di iniziare il lavoro conviene costruire la seguente tabella. + 1 2 3 4 5 6 7 1 2 3 4 5 6 7 10 2 3 4 5 6 7 10 11 3 4 5 6 7 10 11 12 4 5 6 7 10 11 12 13 5 6 7 10 11 12 13 14 6 7 10 11 12 13 14 15 7 10 11 12 13 14 15 16 Supponiamo di eseguire le seguenti somme: a) 326(8) + 234(8) = 562(8) Infatti: 1R 3 2 6(8) + 2 3 4(8) = 5 6 2(8) b) 272(8) + 746(8) = 1240(8) 1R1R 2 7 2(8) + 7 4 6(8) = 1 2 4 0(8) Supponiamo di eseguire, invece, le seguenti differenze: a) 546(8) – 367(8) = 157(8) Infatti: 1P 1P 5 4 6(8) – 3 6 7(8) = 1 5 7(8) 15 b) 342(8) – 173(8) = 147(8) Infatti: 1P 1P 3 4 2(8) – 1 7 3(8) = 1 4 7(8) Somma e sottrazione nel sistema esadecimale Eseguiamo, ora, alcune semplici operazioni di somma e sottrazione nel sistema esadecimale. Prima di iniziare il lavoro conviene costruire la seguente tabella. + 1 2 3 4 5 6 7 8 9 A B C D E F 1 2 3 4 5 6 7 8 9 A B C D E F 10 2 3 4 5 6 7 8 9 A B C D E F 10 11 3 4 5 6 7 8 9 A B C D E F 10 11 12 4 5 6 7 8 9 A B C D E F 10 11 12 13 5 6 7 8 9 A B C D E F 10 11 12 13 14 6 7 8 9 A B C D E F 10 11 12 13 14 15 7 8 9 A B C D E F 10 11 12 13 14 15 16 8 9 A B C D E F 10 11 12 13 14 15 16 17 9 A B C D E F 10 11 12 13 14 15 16 17 18 A B C D E F 10 11 12 13 14 15 16 17 18 19 B C D E F 10 11 12 13 14 15 16 17 18 19 1A C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E Supponiamo di eseguire le seguenti somme: a) 4A6(16) + F2C(16) = 13D2(16) 16 Infatti: 1R 4 A 6(16) + F 2 C(16) = 1 3 D 2(16) b) B49(16) + E24(16) = 196D(16) Infatti: B 4 9(16) + E 2 4(16) = 1 9 6 D(16) Supponiamo di eseguire, invece, le seguenti differenze: E49(16) – C5A(16) = 1EF(16) Infatti: 1P 1P E 4 9(16) – C 5 A(16) = 1 E F(16) F6A(16) – F5D(16) = D(16) Infatti: 1P F 6 A(16) – F 5 D(16) = = = D(16) 17