PDF - Numerazione Binaria e Codifica Digitale
Document Details

Uploaded by AbundantBeryllium
IIS "E. Fermi"
Tags
Summary
Questo documento tratta la numerazione binaria, i byte e la capacità di memoria. Spiega il sistema decimale e il sistema binario e come si interpretano le cifre nei due sistemi. Include esempi e definizioni chiave per comprendere i concetti fondamentali della codifica dei dati, particolarmente rilevanti in informatica.
Full Transcript
```markdown ## IL MONDO DIGITALE ### 3.1 La numerazione binaria Quando misuriamo una grandezza – per esempio, la velocità di un'auto o la nostra temperatura corporea - otteniamo dati quantitativi che si possono rappresentare in **forma analogica** oppure in **forma digitale** [FIGURA 3.1]: * nei...
```markdown ## IL MONDO DIGITALE ### 3.1 La numerazione binaria Quando misuriamo una grandezza – per esempio, la velocità di un'auto o la nostra temperatura corporea - otteniamo dati quantitativi che si possono rappresentare in **forma analogica** oppure in **forma digitale** [FIGURA 3.1]: * nei dispositivi analogici i valori misurati variano in modo continuo, in analogia con le grandezze a cui si riferiscono; è il caso della colonnina dei termometri tradizionali; * i dispositivi digitali invece presentano i dati usando valori numerici, che sono per loro natura discreti, cioè discontinui, come nel display dei termometri elettronici. Il computer è il dispositivo digitale per eccellenza, poiché al suo intero tutte le informazioni sono rappresentate in forma numerica. **FIGURA 3.1** Gli strumenti di misura possono essere analogici o digitali. ### I bit, i byte e la capacità di memoria Sappiamo già che: * il bit (0 o 1) è la più piccola unità di misura dell'informazione; * il byte è un gruppo di 8 bit (come 10010100 o 00110111). Siccome ogni bit può avere due valori diversi, 2 bit possono assumere $2 \times 2 = 2^2 = 4$ valori diversi, 3 bit $2 \times 2 \times 2 = 2^3 = 8$ valori diversi, e così via. | | | | | :---- | :---- | :----- | | 1 bit | 2 bit | 3 bit | | | **00** | **000** | | **0** | | **001** | | | **01** | **010** | | | | **011** | | | **10** | **100** | | **1** | | **101** | | | **11** | **110** | | | | **111** | | | $2^2$ valori | $2^3$ valori | ``` bit 1 0 0 0 1 1 0 1 byte ``` Dunque con un byte di 8 bit si possono rappresentare $2^8 = 256$ valori diversi, per esempio i numeri interi in base 10 che vanno da 0 a 255. Come vedremo tra poco, anche per rappresentare dati non numerici, come le lettere dell'alfabeto e altri simboli, è comodo usare gruppi di 8 bit. Il byte perciò è diventato il riferimento per misurare la capacità di memoria dei dispositivi elettronici. La TABELLA 3.1 mostra che le dimensioni dei documenti (o file) e la capacità dei supporti di memorizzazione in cui li conserviamo (come le memorie SSD o le chiavette USB) si misurano in kilobyte (kB, pari a 1024 byte), megabyte (MB, pari a 1024 kB), gigabyte (GB, pari a 1024 MB) o terabyte (TB, pari a 1024 GB). **RISPONDI AL VOLO** Quanti valori diversi si possono rappresentare con 7 bit? ### CAPITOLO 3 LA CODIFICA DIGITALE DEI DATI | UNITÀ DI MISURA | SIMBOLO | EQUIVALE A | PARI A CIRCA | PUÒ CODIFICARE | | :---------------- | :------ | :----------------------------- | :----------- | :--------------------------------------------------------------- | | byte | B | 8 bit | | un carattere alfanumerico | | kilobyte | kB | 1024 byte = ${2}^{10}$ byte | ${10}^3$ | byte un terzo di una pagina di testo | | megabyte | MB | 1024 kilobyte = 1048 576 byte = ${2}^{20}$ byte | ${10}^6$ byte | circa 300 pagine di testo | | gigabyte | GB | 1024 megabyte = 1048 576 kilobyte = ${2}^{30}$ byte | ${10}^9$ byte | circa 300mila pagine di testo | | terabyte | TB | 1024 gigabyte = 1 048 576 megabyte = ${2}^{40}$ byte | ${10}^{12}$ byte | circa 300 milioni di pagine di testo | *TABELLA 3.1 Le unità con cui si misura la capacità di memoria dei supporti di memorizzazione.* ### Il sistema decimale e il sistema binario Il sistema per codificare i numeri a cui siamo abituati fin da piccoli è il **sistema decimale (o in base 10)**, basato sull'«alfabeto» delle cifre che vanno da 0 a 9. Il sistema decimale è un sistema posizionale, in cui cioè le cifre assumono un valore diverso a seconda della posizione in cui si trovano all'interno di un numero: 427 e 247 per esempio rappresentano due numeri diversi, sebbene le cifre siano le stesse. La posizione delle cifre nei numeri decimali è associata, da destra verso sinistra, alle potenze crescenti di 10: all'estrema destra c'è la cifra delle unità (${10}^0$), poi la cifra delle decine (${10}^1$), poi la cifra delle centinaia (${10}^2$), e così via. Per esempio: $427 = (4 \times {10}^2) + (2 \times{10}^1) + (7 \times {10}^0) = 400 + 20 + 7$ La ragione per cui usiamo il sistema decimale è che nelle mani abbiamo dieci dita: se si adotta una numerazione in base 10, quindi, diventa più semplice contare con le dita. Nel computer tutti i dati sono rappresentati mediante il **sistema di numerazione binario (o in base 2)**, che usa soltanto le due cifre binarie: i bit 0 e 1. Il computer infatti «ha soltanto due dita», nel senso che ogni suo componente interno può assumere soltanto due stati diversi: o è attraversato da corrente elettrica (1) oppure non lo è (0). ### Come si interpretano le cifre nei due sistemi Come il sistema decimale, anche il sistema binario è posizionale; le cifre binarie però sono associate, da destra verso sinistra, alle potenze crescenti di 2, anziché di 10. La semantica dei numeri in base 10, cioè la convenzione che determina il loro significato è data dalle potenze di 10 associate alla posizione di ciascuna cifra. Così, per esempio, nel caso del numero 4703 la corrispondenza è: $ 4 \times{10}^3+ 7 \times {10}^2 + 0 \times{10}^1 + 3 \times {10}^0$ che significa $4703 = 4 \times{10}^3+ 7 \times {10}^2 + 0 \times{10}^1 + 3 \times {10}^0 = 4000 + 700 + 0 + 3$. In modo analogo, per i numeri binari la semantica è data dalle potenze di 2 associate alla posizione di ciascuna cifra. Per esempio, per il byte 10001101 la corrispondenza è: $1 \times {2}^7 + 0 \times {2}^6 + 0 \times {2}^5 + 0 \times {2}^4 + 1 \times {2}^3 + 1 \times {2}^2 + 0 \times {2}^1 + 1 \times {2}^0 $ che significa 10001101 = $1 \times {2}^7 + 0 \times {2}^6 + 0 \times {2}^5 + 0 \times {2}^4 + 1 \times {2}^3 + 1 \times {2}^2 + 0 \times {2}^1 + 1 \times {2}^0$, il che equivale nel sistema decimale a $128 + 0 + 0 + 0 + 8 + 4 + 0 + 1 = 141$ **RISPONDI AL VOLO** Quanto vale una potenza in cui l'esponente è O? ### IL MONDO DIGITALE ### Convertire i numeri da binario a decimale Come abbiamo appena visto, quando si vuole convertire un numero binario in un numero in base 10, l'algoritmo da applicare è il seguente: **ALGORITMO PER LA CONVERSIONE DA BINARIO A DECIMALE** 1. Si moltiplica la cifra binaria più a destra per il fattore $2^0$ (= 1); 2. poi, andando verso sinistra, si moltiplica la cifra binaria successiva per $2^1$ (= 2); 3. poi si moltiplica la cifra binaria ancora più a sinistra per $2^2$ (= 4); quindi si moltiplica la cifra la successiva per $2^3$ (= 8), e così via; 4. alla fine si sommano tutti i numeri decimali così ottenuti. Per esempio, il numero binario 11010 (che si legge «uno uno zero uno zero») corrisponde al numero decimale 26. Infatti: $11010 = (1 \times {2}^4) + (1 \times {2}^3) + (0 \times {2}^2) + (1 \times {2}^1) + (0 \times {2}^0) = 16 + 8 + 0 + 2 + 0 = 26$ Per evitare ambiguità, quando confrontiamo tra loro numeri espressi nelle diverse basi, specificheremo a volte la base con un pedice alla fine del numero; nel caso appena visto, per esempio, scriveremo ${26}_{10}$ e ${11010}_2$. ### Convertire i numeri da decimale a binario Se si vuole invece convertire un numero intero dal sistema decimale a quello binario, l'al-goritmo più semplice è il seguente: **ALGORITMO PER LA CONVERSIONE DA DECIMALE A BINARIO** 1. Si divide il numero decimale per 2 e si registra il valore del resto (che varrà 0 oppure 1); 2. poi si applica la stessa procedura del punto 1 al quoziente della divisione; 3. e così via, fino a quando si arriva a zero, trovando come resto 1; 4. il numero binario cercato è allora dato dall'elenco dei resti ottenuti, ma in ordine inverso rispetto a quello in cui li abbiamo trovati. Se per esempio si parte dal decimale 22, la procedura è la seguente: $22 : 2 = 11$ con resto 0 $11 : 2 = 5$ con resto 1 $5 : 2 = 2$ con resto 1 $2 : 2 = 1$ con resto 0 $1 : 2 = 0$ con resto 1 Il resto dell'ultima divisione, seguito dai resti precedenti ordinati dal basso verso l'alto, dà l'equivalente binario del numero decimale ${22}_{10}$: è il numero binario ${10110}_2$. **RISPONDI AL VOLO** Qual è l'equivalente decimale del numero binario 11111? **RISPONDI AL VOLO** Qual è l'equivalente binario del numero decimale 24? ### ESERCIZI 1. Quale caratteristica hanno in comune il sistema di numerazione decimale e quello binario? 2. Quale numero in base 2 equivale al decimale 155? 3. Quale numero in base 10 equivale al numero binario 10001101? 4. Quanti bit sono necessari per rappresentare nel si-stema binario il numero 1000 del sistema decimale? ### CAPITOLO 3 LA CODIFICA DIGITALE DEI DATI ### Le quattro operazioni con i numeri binari I numeri rappresentati in forma binaria sono numeri a tutti gli effetti, su cui si può operare con procedimenti del tutto analoghi a quelli che siamo abituati ad applicare nel sistema decimale. ### Le addizioni in binario Per sommare due numeri binari, basta metterli in colonna e applicare le regole di base elencate qui sotto. Le regole per la somma tra numeri binari: $0 + 0 = 0$ $0 + 1 = 1$ $1 + 0 = 1$ $1 + 1 = 10$ Vediamo per esempio come si sommano in colonna i due numeri 11101 e 1101: A. si inizia dalla colonna più a destra, quella delle unità (cioè dei bit che hanno peso $2^0$): 1+1 in binario vale 10, perciò scriviamo O nella colonna delle unità e riportiamo l'1 nella colonna delle «decine»; B. nelle «decine», i bit con peso $2^1$, si ha quindi 1+(0+0), che vale 1 e non produce riporti; C. nelle <<centinaia», i bit con peso $2^2$, si ha 1+1 e quindi 0 con riporto di 1; D. nelle «migliaia», i bit con peso $2^3$, si ha 1+1+1, cioè 11, quindi 1 con riporto di 1; E. infine l'ultimo riporto di 1 si somma all'1 iniziale del primo addendo, perciò scriviamo 10 all'inizio del risultato. Quindi: $ {11101}_2 + {1101}_2 = {101010}_2 $ Il risultato della somma è ${101010}_2$, che nella numerazione decimale equivale alla somma ${29}_{10} + {13}_{10} = {42}_{10}$ **RISPONDI AL VOLO** Qual è il risultato della somma binaria 11001 + 1001? ### Le sottrazioni in binario Per fare le sottrazioni tra numeri binari basta tenere presente che 10 – 1 = 1; questo serve quando si deve prendere a prestito dalla colonna vicina. Per esempio, per sottrarre 10101 da to 111011 incolonniamo i due numeri e poi: A. nella colonna delle unità si ha 1 – 1, perciò il risultato è 0; B. nella colonna delle «decine» si ha 1 – 0, perciò il risultato è 1; C. nella colonna delle «centinaia» si ha 0 – 1, perciò si deve prendere a prestito l'1 dalla colonna delle «migliaia»> del minuendo e si ha 10 – 1, con risultato 1; D. ora nelle «migliaia»> del minuendo è rimasto 0, perciò si ha 0 – 0 e il risultato è 0; E. infine nelle prime due colonne rimane 11 – 1, che dà come risultato 10. Quindi: ${111011}_2 - {10101}_2 = {100110}_2$ ${59}_{10} - {21}_{10} = {38}_{10}$ ### IL MONDO DIGITALE ### Le moltiplicazioni in binario La moltiplicazione dei numeri binari è più semplice di quella dei numeri decimali, perché le «tabelline» da ricordare si riducono a quelle elencate qui sotto. Le <<tabelline>> per la moltiplicazione tra numeri binari: $0 \times 0 = 0$ $0 \times 1 = 0$ $1 \times 0 = 0$ $1 \times 1 = 1$ Vediamo per esempio come si ottiene il prodotto di 101 per 11: A. moltiplico la seconda cifra di 11 e scrivo il risultato B. moltiplico la prima cifra di 11 e scrivo il risultato spostato di una colonna C. infine sommo colonna per colonna i due risultati parziali Abbiamo così trovato che ${101}_2 \times{11}_2 = {1111}_2$, il che in base 10 equivale a ${5}_{10} \times {3}_{10} = {15}_{10}$ **RISPONDI AL VOLO** Qual è il risultato della moltiplicazione binaria di 110 per 101? ### Le divisioni in binario Per fare divisioni tra numeri binari la procedura è analoga a quella in base 10. Ecco per esempio i passaggi da seguire se si vuole dividere 11010 per 10: A. il quoziente inizia con 1 e si sottrae il divisore 10 dalle prime due cifre del dividendo, trovando come resto 1; B. si «abbassa» la terza cifra del dividendo e si sottrae il divisore, con resto 0; C. come terza cifra del quoziente si ha perciò 0, ma il resto ora è 1 (la cifra abbassata del dividendo); D. l'ultima cifra abbassata dà proprio il divisore 10, perciò il quoziente termina con 1. Quindi ${11010}_2 : {10}_2 = {1101}_2$, vale a dire ${26}_{10} : {2}_{10} = {13}_{10}$ **RISPONDI AL VOLO** Qual è il risultato della divisione binaria di 11001 per 101? ### ESERCIZI 1. Esegui questa addizione tra numeri binari e scrivi il risultato. $10100 + 10111 =$ 2. Esegui questa moltiplicazione tra numeri binari e scrivi il risultato. $1011 \times 11 =$ 3. Esegui questa sottrazione tra numeri binari e scrivi il risultato. $11101 - 1111 =$ 4. Esegui questa divisione tra numeri binari e scrivi il risultato. $11110 : 11 =$ ### CAPITOLO 3 LA CODIFICA DIGITALE DEI DATI ### La codifica dei numeri nel computer Finora abbiamo considerato soltanto numeri naturali, dando per scontato il loro segno positivo. Nel computer, però, vogliamo poter rappresentare tutti gli interi, quindi anche i numeri negativi. Bisogna allora estendere il codice usato finora. Lo si può fare notando che i segni possi bili - <<più>> e <<meno>> Sono due, proprio come i valori di un bit. La scelta più naturale, dunque, è dedicare al segno il primo bit usato per rappresentare i numeri: diremo che nel primo bit il valore 0 rappresenta il segno +, mentre il valore 1 rap presenta il segno -. Questa convenzione sul segno, però, non è di per sé sufficiente per portare a una buona rappresentazione dei numeri relativi. Se per esempio abbiamo a disposizione in tutto 3 bit, avremmo infatti la seguente rappresentazione dei numeri di 2 bit con segno: | | | | | :----- | :--- | :--- | | | +3 | 011 | | numeri | +2 | 010 | | | +1 | 001 | | positivi | +0 | 000 | | | -0 | 100 | | | -1 | 101 | | numeri | -2 | 110 | | | -3 | 111 | | negativi | non funziona! | Questa rappresentazione presenta un serio problema: lo zero è associato a due diversi numeri binari, 000 (lo «zero positivo») e 100 (lo «zero negativo»). In realtà, però, di zero ne esiste uno solo, e vogliamo poterlo rappresentare in modo univoco. ### Il complemento a due Per questa ragione per i numeri con segno negativo si usa una rappresentazione diversa, basata sull'operazione detta di **complementazione a due**. Dato un numero binario, il nume ro binario di segno opposto si trova con questo algoritmo: **ALGORITMO PER COMPLEMENTARE A DUE** 1. Si cambiano tutti gli 0 in 1, e viceversa (complementazione a uno); 2. poi si aggiunge 1 al risultato (complementazione a due). Così, per esempio, per passare dal numero +3 al numero -3 la procedura è: 011 numero positivo +3 100 complemento a 1 1 si aggiunge 1 101 numero negativo -3 in complemento a 2 Nel caso di 3 bit, allora, i numeri con segno sono rappresentati così: | | | | | :----- | :--- | :--- | | | +3 | 011 | | numeri | +2 | 010 | | positivi | +1 | 001 | | | +0 | 000 | | | -1 | 111 | | numeri negativi in complemento a 2 | | -2 110 | | | -3 | 101 | | | -4 | 100 | Con questa rappresentazione non c'è più ambiguità riguardo allo zero, che è sempre e soltanto associato a una sequenza di zeri. Va notato inoltre che con 3 bit si possono rappresenta-i numeri che vanno da -4 a +3, cioè in totale $2^3 = 8$ numeri diversi. IN GENERALE, con n bit si possono rappresentare i numeri che vanno da $-2^{n-1}$ a $(+2^{n-1} - 1)$. **RISPONDI AL VOLO** Quale range di numeri con segno si può rappresentare con 2 byte? ```