La notazione binaria Dispense di Informatica per l ITG Valadier Le informazioni dentro il computer All interno di un calcolatore tutte le informazioni sono memorizzate sottoforma di lunghe sequenze di 0 e 1. Può sembrare incredibile che informazioni complicate come lunghi testi, fotografie, brani musicali e programmi possano essere rappresentate semplicemente con sequenze di 0 e 1, eppure questo è possibile grazie ad opportune codifiche. Pensate ad esempio al codice Morse: solo con due simboli, linea e punto, è possibile comunicare qualsiasi messaggio. Una situazione simile a quella che si verifica nel nostro computer: solo due simboli da mettere in sequenza per codificare... tutto. Una codifica in cui usiamo solo due simboli si dice binaria. Ma perché questa scelta, perché usare solo 0 e 1? Il motivo sta nella struttura fisica del computer, nell hardware. Infatti, i componenti che costituiscono il calcolatore, come ad esempio il processore e la memoria RAM, non sono altro che circuiti elettronici. Per la precisione, si chiamano chip, o circuiti integrati quei componenti in cui si riesce a realizzare, all interno di un piccolo quadratino di silicio, milioni e milioni di piccolissimi componenti elettronici chiamati transistor. Un transistor può essere usato come un piccolissimo interruttore, che può far passare una piccolissima corrente, oppure bloccarla. Questo piccolo interruttore, che può essere acceso o spento, ci permette di rappresentare un bit, e cioè un valore che può essere 0 o 1. Ad esempio: interruttore aperto vale 1, interruttore chiuso vale 0. La rappresentazione dei numeri Adesso che abbiamo capito perché il calcolatore ragiona in termini di 0 e 1, resta da capire come fa a rappresentare tutte le informazioni in questo modo... Per adesso ci accontentiamo di studiare come viene codificato un importantissimo tipo di dato, e cioè i numeri. In particolare, vediamo la rappresentazione binaria dei numeri naturali (0, 1, 2, 3, e così via...). Per capire la notazione binaria dei numeri, ci conviene fare mente locale su come funziona la notazione decimale, che ben conosciamo. Prendiamo ad esempio 1
2 il numero 473: per specificare bene che il numero è rappresentato in notazione decimale, o in base 10, possiamo scrivere anche (473) 10. Il numero è formato da tre cifre, la cifra più a destra rappresenta le unità, e andando verso sinistra abbiamo la cifra che rappresenta le decine, poi le centinaia, poi le migliaia, e così via... Ad esempio, nel numero (473) 10 abbiamo 3 unità, 7 decine e 4 centinaia. Infatti possiamo scriverlo anche così: (473) 10 = 4 100 + 7 10 + 3 1 Se ci facciamo caso, quelle che abbiamo chiamato le unità, le decine, le centinaia, le migliaia, ecc... altro non sono che le potenze del 10, a partire dall esponente 0 in su. Infatti 1 = 10 0, 10 = 10 1, 100 = 10 2, 1000 = 10 3 e così via... E allora possiamo riscrivere il nostro numero anche in quest altro modo: (473) 10 = 4 10 2 + 7 10 1 + 3 10 0 A questo punto non è difficile introdurre la notazione binaria. Infatti, la notazione binaria funziona esattamente come la notazione decimale, solo che invece delle potenze del 10, si usano le... potenze del 2! Ecco una tabella di potenze del 2, a partire da esponente 0 in su. 2 0 1 2 1 2 2 2 4 2 3 8 2 4 16 2 5 32 2 6 64 2 7 128 2 8 256 2 9 512 2 10 1024 Prendiamo adesso ad esempio il numero (19) 10. In notazione binaria, questo numero vale 10011, o meglio (10011) 2. Sarà vero? Verifichiamolo! (10011) 2 = 1 2 4 +0 2 3 +0 2 2 +1 2 1 +1 2 0 = 16+0+0+2+1 = (19) 10 Tradurre un numero da binario a decimale A questo punto possiamo stabilire il procedimento per tradurre un numero da base 2 a base 10 (cioè da binario a decimale). Il procedimento è questo:
3 1. Scrivere ben distanziate le cifre del numero binario. 2. Sotto ciascuna cifra riportare la rispettiva potenza del 2 (a cominciare da destra con l esponente 0 e aumentando l esponente via via verso sinistra). 3. Sotto ciascuna potenza del due, riportare la potenza sviluppata, in decimale (ad esempio, sotto 2 3 va 8). 4. Abbassare solo i valori delle potenze che corrispondono ad 1 nel numero binario di partenza. 5. Sommare le potenze abbassate. Lo schema qui sotto rappresenta il procedimento per il numero (10110) 2. 1 0 1 1 0 2 4 2 3 2 2 2 1 2 0 16 8 4 2 1 16 4 2 Alla fine del procedimento otteniamo 16 + 4 + 2 = (22) 10. Numero di bit necessario a rappresentare un valore Possiamo osservare che per rappresentare un certo numero in binario, spesso abbiamo bisogno di più cifre rispetto a quelle richieste per rappresentarlo in decimale, infatti ad esempio (10110) 2 = (22) 10 (5 cifre binarie, mentre ne bastano 2 decimali). È chiaro che, avendo meno simboli a disposizione, dobbiamo metterne in fila di più per avere le stesse informazioni. Ma precisamente quante cifre servono per rappresentare un certo numero? Partiamo prima da qualche esempio con la notazione decimale: qual è il numero più grande che posso rappresentare con 3 cifre decimali? Essendo 9 la cifra decimale più alta, per fare il numero più grande devo rendere uguali a 9 tutte e 3 le cifre, ottenendo il numero (999) 10. Possiamo notare queste equivalenze: 999 = 1000 1 = 10 3 1 Questa regola è vera in generale: il numero più grande che posso rappresentare con n cifre decimali è proprio 10 n 1. Esempio: il numero più grande che posso rappresentare con 4 cifre decimali è 10 4 1. Infatti abbiamo: 10 4 1 = 10000 1 = 9999
4 In base 2, la regola è simile... basta mettere 2 al posto di 10! Il numero più grande che posso rappresentare con n cifre binarie (cioè n bit ) è proprio 2 n 1. Vogliamo fare una verifica? Ad esempio qual è il numero più grande che posso rappresentare con 4 bit? La regola mi dice: 2 4 1 = 16 1 = 15 Verifichiamo che questo sia vero. Se volessi scrivere il numero più grande che posso fare con 4 cifre binarie, questo numero sarebbe chiaramente (1111) 2 (ogni cifra deve essere messa al massimo... ma il massimo è 1!). Con il procedimento visto prima, traduci in decimale il numero (1111) 2... e il risultato sarà proprio 15! Supponiamo di dover rispondere ad una domanda di questo tipo: quanti bit mi servono per rappresentare il valore 57? Con la regola vista, la risposta è semplice. Ecco qui una tabella che ci dice il numero più grande che si può rappresentare con n bit. Per individuare il minimo numero di bit necessari a rappresentare un certo valore, basta scorrere la colonna più a sinistra della tabella ed approssimare per eccesso, fermarsi cioè al primo numero incontrato che sia più grande (o anche uguale) al valore che devo rappresentare. numero bit regola valore massimo 1 bit 2 1 1 1 2 bit 2 2 1 3 3 bit 2 3 1 7 4 bit 2 4 1 15 5 bit 2 5 1 31 6 bit 2 6 1 63 7 bit 2 7 1 127 8 bit 2 8 1 255 9 bit 2 9 1 511 10 bit 2 10 1 1023 Applicando questo procedimento vediamo che per rappresentare il valore 57 bastano 6 bit, perché con 6 bit possiamo rappresentare numeri fino a 63. Usare 5 bit non sarebbe sufficiente, perché con 5 bit arrivo al massimo a 31. Tradurre un numero da decimale a binario Abbiamo visto come tradurre un numero da binario a decimale, e anche qual è il numero più grande che posso rappresentare con n bit. L ultimo argomento che ci rimane da affrontare, è come tradurre un numero da decimale a binario... Ad esempio, abbiamo visto che per rappresentare 57 ci servirebbero
5 6 bit... Ma qual è la rappresentazione di 57 in binario? Il procedimento è abbastanza semplice: si divide per 2 il numero e si scrivono quoziente e resto (il resto può essere solo 0 o 1!). Una volta fatto, si continua a dividere ancora il quoziente per 2 (scrivendo sempre il resto), finché il quoziente non diventa 1. A questo punto si parte da quell 1 (l ultimo quoziente), che sarà la prima cifra, e si aggiungono di seguito tutti i resti ottenuti, ma a ritroso (dal più recente risalendo al più vecchio). La sequenza di cifre binarie ottenuta è il numero cercato! Svolgiamo l esempio con il valore 57: 57:2 q=28 r=1 28:2 q=14 r=0 14:2 q=7 r=0 7:2 q=3 r=1 3:2 q=1 r=1 Seguiamo i numeri in neretto, con l aiuto delle frecce. A partire dall ultima riga, si prende prima il quoziente, poi il resto, e così otteniamo 11. Successivamente, si prendono tutti i resti delle righe precedenti, dalla penultima risalendo in su fino alla prima. Il risultato è 111001. Abbiamo trovato quindi che (57) 10 = (111001) 2 (verificalo!). Abbiamo anche confermato che il valore binario è formato proprio da 6 bit, come abbiamo trovato prima. Esercizi 1. Traduci da binario a decimale il numero (101) 2. 2. Traduci da binario a decimale il numero (110) 2. 3. Traduci da binario a decimale il numero (1111) 2. 4. Traduci da binario a decimale il numero (10110) 2. 5. Traduci da binario a decimale il numero (101010) 2. 6. Quanti bit servono per rappresentare in binario il numero (12) 10? 7. Quanti bit servono per rappresentare in binario il numero (25) 10? 8. Quanti bit servono per rappresentare in binario il numero (213) 10? 9. Quanti bit servono per rappresentare in binario il numero (788) 10? 10. Quanti bit servono per rappresentare in binario il numero (64) 10?
6 11. Traduci da decimale a binario il numero (24) 10. 12. Traduci da decimale a binario il numero (41) 10. 13. Traduci da decimale a binario il numero (112) 10. 14. Traduci da decimale a binario il numero (14) 10. 15. Traduci da decimale a binario il numero (311) 10.