💾 003 - Computer 8 bit - Codice binario 💾
Nell'articolo precedente, abbiamo parlato del fatidico PROCESSORE, ed abbiamo compreso che altro non è che una componente che esegue istruzioni ed elabora informazioni seguendo quelle istruzioni.
Abbiamo anche specificato che i computer moderni sono calcolatori elettronici, il che significa che sono composti da diversi circuiti elettronici, che permettono di elaborare le informazioni di cui abbiamo appena parlato.
Questi due fatti, possono portarci ad una fondamentale conclusione: il PROCESSORE non è altro che una combinazione di diverse componenti elettroniche, il che rende il processore stesso, una componente elettronica.
Il processore infatti riceve ed elabora solo informazioni che gli vengono trasmesse attraverso segnali elettrici. Segnali che attraverso una specifica codifica, quella binaria, permettono di rappresentare numeri e poi lettere e molto, molto altro.
--

Un microprocessore: da notare le diverse parti "argentate" che permettono il collegamento elettrico tra il processore ed il circuito in cui deve essere montato. Foto di Vishnu Mohanan su Unsplash
Il codice binario quindi, è una codifica che permette a dei segnali elettrici di rappresentare informazioni che per noi esseri umani hanno senso, essendo allo stesso tempo adatti ad essere elaborati da un processore
Da questo punto di vista, il codice binario è molto simile ad una lingua.
E' una convenzione tra noi, esseri umani, e la macchina, il processore.
Una convenzione, che permette al processore di capire le informazioni che gli forniamo, ed a noi, di utilizzare i risultati ottenuti dalla sua elaborazione per i nostri scopi.
Partiamo dalle basi:
Il codice binario è un sistema di numerazione. Cioè una convenzione che permette di rappresentare i numeri attraverso un insieme di simboli.
Anche la numerazione decimale che usiamo nella vita di tutti i giorni, è un sistema di numerazione: Un sistema di numerazione che prevede 10 cifre (o simboli): 0,1,2,3,4,5,6,7,8,9
Il codice binario, a differenza di quello decimale invece, prevede solo 2 cifre: 0 ed 1.
Queste due cifre, hanno un significato molto semplice:
| Simbolo binario | significato | Stato osservato dal punto di vista elettrico |
|---|---|---|
| 1 | "acceso" | 💡 <<< lampadina accesa |
| 0 | "spento" | 💡 <<< lampadina spenta |
Con "acceso" e "spento", non sto facendo riferimento ad un qualche tipo di metafora, ma sto intendendo lo stato "pratico" in cui il simbolo binario è rappresentato dal punto di vista elettrico.
Infatti, dobbiamo ricordare che l'unico motivo per cui stiamo utilizzando il codice binario, è perchè questo è facile da utilizzare con i segnali elettrici, che i processori "comprendono" (in quanto dispositivi elettronici).
Quando vediamo "1", dobbiamo pensare ad una lampadina accesa, ad un passaggio di corrente.
Quando vediamo "0", è come se la lampadina fosse spenta, senza alcun passaggio di corrente.
Gli "1" e gli "0" del codice binario, possono essere utilizzati, proprio come le cifre decimali che siamo abituati ad utilizzare tutti i giorni, per descrivere dei numeri.
Realizziamo una tabella con alcuni esempi:
| Numero decimale | Numero in codifica binaria |
|---|---|
| 2 | 0010 |
| 4 | 0100 |
| 5 | 0101 |
| 7 | 0111 |
In questa tabella, vediamo un numero decimale a sinistra, accompagnato dalla sua codifica in codice binario a destra.
--
Concentriamoci adesso su una particolare porzione della tabella:
| Numero decimale | Numero in codifica binaria |
|---|---|
| 2 | 0010 |
| 4 | 0100 |
In questa particolare porzione della tabella, troviamo il numero 2 ed il numero 4, accompagnati dalla loro codifica binaria
Voglio porre la attenzione su due fatti, che ci saranno utili per comprendere a fondo il funzionamento del codice binario:
Le due codifiche, presentano lo stesso numero di "1" al loro interno, ma rappresentano per l'appunto numeri diversi.
Questo ci fa dedurre, che a differenziare tra di loro le due codifiche, è la posizione dell'uno.
--
La differenza di posizione, è ciò che modifica il valore delle diverse cifre del codice binario, in quanto il codice binario è un sistema di numerazione posizionale, in cui la posizione di una determinata cifra, ne modifica il valore.
La stessa cosa inoltre, succede anche nel sistema decimale:
2 = "due"
20 = "venti"
così come in binario:
0010 = "due"
0100 = "quattro"
La posizione quindi di una cifra binaria, è ciò che modifica il suo valore numerico.
Abbiamo appena appreso che il codice binario, in quanto sistema di numerazione posizionale, fa corrispondere ad ogni cifra, un diverso valore, a seconda della sua posizione...
Ma quale è questo valore? 🧐
Realizziamo una seconda tabella, questa volta però ad ogni colonna della tabella, corrisponderà una diversa posizione della codifica binaria:
| Posizione >>> | 3 | 2 | 1 | 0 |
|---|---|---|---|---|
| Codifica binaria >>> | 0 | 0 | 1 | 0 |
Le posizioni sono numerate da 0 a 3.
Andiamo adesso ad aggiungere alla tabella il valore che ogni posizione fa "assumere" alla cifra in se contenuta:
| Posizione >>> | 3 | 2 | 1 | 0 |
|---|---|---|---|---|
| Valore assunto >>> | ||||
| Codifica binaria >>> | 0 | 0 | 1 | 0 |
La situazione adesso si complica: ad ogni posizione corrisponde un valore, che è equivalente a:
dove n altro non è che la posizione in cui la cifra si trova... (per questo le avevo numerate da 0 a 3 e non da 1 a 4 😉)
Ma in ogni posizione ci sono cifre differenti: in alcune posizioni c'è un 1, in altre c'è uno 0.
Come si fa?
Completiamo la tabella aggiungendo un'altra riga che corrisponde alla seguente operazione:
| Posizione >>> | 3 | 2 | 1 | 0 |
|---|---|---|---|---|
| Valore assunto >>> | ||||
| Codifica binaria >>> | 0 | 0 | 1 | 0 |
| Risultato di |
0 | 0 | 2 | 0 |
Notiamo che in tutte le posizioni in cui compariva uno "0" nella codifica binaria, il risultato di
In questo caso particolare, quel 2 è proprio il valore decimale del numero binario 0010, in quanto questo particolare numero binario contiene solo un "1"
Vogliamo provare con un numero più complesso?
Un numero in cui compare più di un 1?
Magari un numero con più cifre?
Eccovelo servito:
| Posizione >>> | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Valore assunto >>> | ||||||||
| Codifica binaria >>> | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
| Risultato di |
128 | 64 | 0 | 16 | 8 | 0 | 2 | 1 |
Volete sapere quanto vale questo numero in decimale?
Basta sommare tra di loro tutti i risultati che compaiono nell'ultima riga della tabella:
128 + 64 + 0 + 16 + 8 + 0 + 2 + 1 = 219
Finalmente! Abbiamo trasformato un numero espresso in codifica binaria in uno in codifica decimale, comprendendo anche il valore delle varie "posizioni"
Inoltre, il metodo che abbiamo appena imparato si applica ad ogni numero binario, di qualsiasi lunghezza esso sia!
Prima di concludere, voglio però introdurvi a due concetti nuovi:
Per chi di voi avesse ancora dei dubbi sul funzionamento di questo metodo, ho preparato altri esempi che dovrebbero essere in grado di estinguere ogni dubbio.
Prima però, stiliamo una lista degli step necessari per eseguire la conversione:
--
Esempio 1:
Cifra binaria: 1110
Risultato decimale: 14
| Posizione >>> | 3 | 2 | 1 | 0 |
|---|---|---|---|---|
| Valore assunto >>> | ||||
| Codifica binaria >>> | 1 | 1 | 1 | 0 |
| Risultato di |
8 | 4 | 2 | 0 |
--
Esempio 2:
Cifra binaria: 11011111
Risultato decimale: 223
| Posizione >>> | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Valore assunto >>> | ||||||||
| Codifica binaria >>> | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
| Risultato di |
128 | 64 | 0 | 16 | 8 | 4 | 2 | 1 |
Sino ad adesso, abbiamo eseguito delle conversioni da una codifica binaria ad il suo corrispettivo decimale: è giunto il momento di fare il contrario!
Prendiamo un numero decimale a caso:
Numero decimale: 25
Andiamo adesso a trovare la codifica binaria del numero 25, seguendo il seguente procedimento:
--
Eseguiamo il procedimento appena descritto:
| Prima divisione | Seconda divisione | Terza divisione | Quarta divisione | Quinta divisione | |
|---|---|---|---|---|---|
| Numero decimale da dividere >>> | 25 | 12 | 6 | 3 | 1 |
| Quoziente della divisione intera >>> | 12 | 6 | 3 | 1 | 0 |
| Resto della divisione >>> | 1 | 0 | 0 | 1 | 1 |
Leggendo i vari resti delle varie divisioni da sinistra verso destra, otteniamo che la codifica binaria di 25 è 10011
Da notare inoltre, che il processo di divisione si arresta solo quando si raggiunge un'operazione che dia come quoziente 0 (sottolineato in giallo nella tabella)
Per rendere più chiaro, nel caso in cui non si fosse capito, l'andamento delle varie divisioni, ho aggiunto delle frecce alla tabella, per riuscire a comprendere meglio il procedimento:

--
Possiamo anche verificare che il procedimento sia avvenuto correttamente, eseguendo il procedimento di conversione dalla codifica binaria appena trovata, al numero decimale di partenza, e vedere se corrisponde:
| Posizione >>> | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|
| Valore assunto >>> | |||||
| Codifica binaria >>> | 1 | 1 | 0 | 0 | 1 |
| Risultato di |
16 | 8 | 0 | 0 | 1 |
16 + 8 + 1 = 25
Il procedimento funziona!
Sempre per chiarire ogni possibile dubbio, ho preparato altri esempi:
--
Esempio 1:
Numero Decimale: 36
Codifica binaria corrispondente: 100100
| Prima divisione | Seconda divisione | Terza divisione | Quarta divisione | Quinta divisione | Sesta divisione | |
|---|---|---|---|---|---|---|
| Numero decimale da dividere >>> | 36 | 18 | 9 | 4 | 2 | 1 |
| Quoziente della divisione intera >>> |
18 | 9 | 4 | 2 | 1 | 0 |
| Resto della divisione >>> | 0 | 0 | 1 | 0 | 0 | 1 |
--
Esempio 2:
Numero Decimale: 24
Codifica binaria corrispondente: 11000
| Prima divisione | Seconda divisione | Terza divisione | Quarta divisione | Quinta divisione | |
|---|---|---|---|---|---|
| Numero decimale da dividere >>> | 24 | 12 | 6 | 3 | 1 |
| Quoziente della divisione intera >>> |
12 | 6 | 3 | 1 | 0 |
| Resto della divisione >>> | 0 | 0 | 0 | 1 | 1 |
Adesso che conosciamo il funzionamento del codice binario, e siamo in grado di eseguire le conversioni base da binario a decimale e viceversa, possiamo approfondire il modo in cui le cifre binarie vengono raggruppate, e le diverse nomenclature di quei gruppi:
Capiremo meglio come la definizione di "bit" e di "byte" si va ad applicare nel pratico più avanti, quando cominceremo a parlare di architettura di processori, e le componenti che lo costituiscono.
E' anche giusto segnalare, che esistono nomenclature anche per sequenze di bit maggiori del byte, come per esempio:
Dovete sapere, che il codice binario permette di codificare moltissimi altri tipi di informazione oltre che solamente numeri interi. Dato che OGNI COSA che il vostro computer riesce ad elaborare, che siano lettere, foto o video, deve essere in un modo o nell'altro memorizzata sotto forma di informazione binaria. Sono stati sviluppati altri metodi di interpretare e "sfruttare" il codice binario, per permettergli di memorizzare numeri "con la virgola", così come i caratteri che compongono il testo che state leggendo e molto, davvero molto altro.
In questo articolo non parleremo di tutti gli innumerevoli tipi di informazione che il binario può rappresentare: ci vorrebbe davvero troppo tempo e non avrebbe neanche molto senso, dato che imparereste cose che molto probabilmente non usereste mai.
Invece, ho deciso di approfondire uno degli esempi più classici di come il binario sia utilizzato per rappresentare altre informazioni, oltre che semplici numeri interi: la tabella ASCII.
Il modo più facile per descrivere la tabella ASCII, è affermare che altro non è che una corrispondenza tra uno specifico numero binario, ad un carattere.
--
Nella tabella che vi ho lasciato qui sotto, non è presente l'interezza della tabella ascii, ma sollo la porzione che va dal carattere 32 ad il carattere 127
Questo perchè i caratteri dal 32 al 127 sono i cosiddetti "caratteri stampabili", alcuni dei quali sono proprio come quelli che state leggendo voi adesso.
La tabella ASCII infatti, non contiene solo le lettere (maiuscole e minuscole) ed i numeri che usiamo normalmente, ma anche simboli (come per esempio il %).
I caratteri come i numeri, le lettere, ed i simboli come il %, sono tutti "caratteri stampabili" perchè se digitati, possono essere "stampati" a schermo.
La maggior parte dei caratteri stampabili, sono quelli che possiamo trovare anche sulla tastiera ⌨️⌨️
Da notare che anche lo "spazio" fa parte dei caratteri stampabili (è il primo della tabella, numero 32), dato che anche se a noi (esseri umani) appare come un semplice spazio vuoto, per il computer è un carattere a tutti gli effetti !
| DEC (Decimale) | OCT (Ottale) | HEX (esadecimale) | BIN (rappresentazione binaria) | Carattere rappresentato | Descrizione |
|---|---|---|---|---|---|
| 32 | 040 | 20 | 00100000 | Space | |
| 33 | 041 | 21 | 00100001 | ! | Exclamation mark |
| 34 | 042 | 22 | 00100010 | " | Double quotes (or speech marks) |
| 35 | 043 | 23 | 00100011 | # | Number |
| 36 | 044 | 24 | 00100100 | $ | Dollar |
| 37 | 045 | 25 | 00100101 | % | Procenttecken |
| 38 | 046 | 26 | 00100110 | & | Ampersand |
| 39 | 047 | 27 | 00100111 | ' | Single quote |
| 40 | 050 | 28 | 00101000 | ( | Open parenthesis (or open bracket) |
| 41 | 051 | 29 | 00101001 | ) | Close parenthesis (or close bracket) |
| 42 | 052 | 2A | 00101010 | * | Asterisk |
| 43 | 053 | 2B | 00101011 | + | Plus |
| 44 | 054 | 2C | 00101100 | , | Comma |
| 45 | 055 | 2D | 00101101 | - | Hyphen |
| 46 | 056 | 2E | 00101110 | . | Period, dot or full stop |
| 47 | 057 | 2F | 00101111 | / | Slash or divide |
| 48 | 060 | 30 | 00110000 | 0 | Zero |
| 49 | 061 | 31 | 00110001 | 1 | One |
| 50 | 062 | 32 | 00110010 | 2 | Two |
| 51 | 063 | 33 | 00110011 | 3 | Three |
| 52 | 064 | 34 | 00110100 | 4 | Four |
| 53 | 065 | 35 | 00110101 | 5 | Five |
| 54 | 066 | 36 | 00110110 | 6 | Six |
| 55 | 067 | 37 | 00110111 | 7 | Seven |
| 56 | 070 | 38 | 00111000 | 8 | Eight |
| 57 | 071 | 39 | 00111001 | 9 | Nine |
| 58 | 072 | 3A | 00111010 | : | Colon |
| 59 | 073 | 3B | 00111011 | ; | Semicolon |
| 60 | 074 | 3C | 00111100 | Less than (or open angled bracket) | |
| 61 | 075 | 3D | 00111101 | = | Equals |
| 62 | 076 | 3E | 00111110 | > | Greater than (or close angled bracket) |
| 63 | 077 | 3F | 00111111 | ? | Question mark |
| 64 | 100 | 40 | 01000000 | @ | At symbol |
| 65 | 101 | 41 | 01000001 | A | Uppercase A |
| 66 | 102 | 42 | 01000010 | B | Uppercase B |
| 67 | 103 | 43 | 01000011 | C | Uppercase C |
| 68 | 104 | 44 | 01000100 | D | Uppercase D |
| 69 | 105 | 45 | 01000101 | E | Uppercase E |
| 70 | 106 | 46 | 01000110 | F | Uppercase F |
| 71 | 107 | 47 | 01000111 | G | Uppercase G |
| 72 | 110 | 48 | 01001000 | H | Uppercase H |
| 73 | 111 | 49 | 01001001 | I | Uppercase I |
| 74 | 112 | 4A | 01001010 | J | Uppercase J |
| 75 | 113 | 4B | 01001011 | K | Uppercase K |
| 76 | 114 | 4C | 01001100 | L | Uppercase L |
| 77 | 115 | 4D | 01001101 | M | Uppercase M |
| 78 | 116 | 4E | 01001110 | N | Uppercase N |
| 79 | 117 | 4F | 01001111 | O | Uppercase O |
| 80 | 120 | 50 | 01010000 | P | Uppercase P |
| 81 | 121 | 51 | 01010001 | Q | Uppercase Q |
| 82 | 122 | 52 | 01010010 | R | Uppercase R |
| 83 | 123 | 53 | 01010011 | S | Uppercase S |
| 84 | 124 | 54 | 01010100 | T | Uppercase T |
| 85 | 125 | 55 | 01010101 | U | Uppercase U |
| 86 | 126 | 56 | 01010110 | V | Uppercase V |
| 87 | 127 | 57 | 01010111 | W | Uppercase W |
| 88 | 130 | 58 | 01011000 | X | Uppercase X |
| 89 | 131 | 59 | 01011001 | Y | Uppercase Y |
| 90 | 132 | 5A | 01011010 | Z | Uppercase Z |
| 91 | 133 | 5B | 01011011 | [ | Opening bracket |
| 92 | 134 | 5C | 01011100 | || | |
| 93 | 135 | 5D | 01011101 | ] | Closing bracket |
| 94 | 136 | 5E | 01011110 | ^ | Caret - circumflex |
| 95 | 137 | 5F | 01011111 | _ | Underscore |
| 96 | 140 | 60 | 01100000 | ` | Grave accent |
| 97 | 141 | 61 | 01100001 | a | Lowercase a |
| 98 | 142 | 62 | 01100010 | b | Lowercase b |
| 99 | 143 | 63 | 01100011 | c | Lowercase c |
| 100 | 144 | 64 | 01100100 | d | Lowercase d |
| 101 | 145 | 65 | 01100101 | e | Lowercase e |
| 102 | 146 | 66 | 01100110 | f | Lowercase f |
| 103 | 147 | 67 | 01100111 | g | Lowercase g |
| 104 | 150 | 68 | 01101000 | h | Lowercase h |
| 105 | 151 | 69 | 01101001 | i | Lowercase i |
| 106 | 152 | 6A | 01101010 | j | Lowercase j |
| 107 | 153 | 6B | 01101011 | k | Lowercase k |
| 108 | 154 | 6C | 01101100 | l | Lowercase l |
| 109 | 155 | 6D | 01101101 | m | Lowercase m |
| 110 | 156 | 6E | 01101110 | n | Lowercase n |
| 111 | 157 | 6F | 01101111 | o | Lowercase o |
| 112 | 160 | 70 | 01110000 | p | Lowercase p |
| 113 | 161 | 71 | 01110001 | q | Lowercase q |
| 114 | 162 | 72 | 01110010 | r | Lowercase r |
| 115 | 163 | 73 | 01110011 | s | Lowercase s |
| 116 | 164 | 74 | 01110100 | t | Lowercase t |
| 117 | 165 | 75 | 01110101 | u | Lowercase u |
| 118 | 166 | 76 | 01110110 | v | Lowercase v |
| 119 | 167 | 77 | 01110111 | w | Lowercase w |
| 120 | 170 | 78 | 01111000 | x | Lowercase x |
| 121 | 171 | 79 | 01111001 | y | Lowercase y |
| 122 | 172 | 7A | 01111010 | z | Lowercase z |
| 123 | 173 | 7B | 01111011 | { | Opening brace |
| 124 | 174 | 7C | 01111100 | | | Vertical bar |
| 125 | 175 | 7D | 01111101 | } | Closing brace |
| 126 | 176 | 7E | 01111110 | ~ | Equivalency sign - tilde |
| 127 | 177 | 7F | 01111111 | Delete |
Non ho realizzato questa tabella: sito da cui la ho recuperata: QUI
--
La distinzione tra caratteri stampabili e non, è importante quando si considera che in altre porzioni della tabella (i caratteri dallo 0 al 31 ) sono presenti i cosiddetti "caratteri di controllo", che non rappresentano numeri o lettere, ma venivano usati per inviare comandi alle telescriventi (immaginatele come delle enormi macchine da scrivere automatizzate) per cui la tabella ASCII veniva a volte utilizzata (dipendeva dal modello della telescrivente).
Per esempio il carattere 7 della tabella ASCII è un carattere di controllo:
| DEC (Decimale) | OCT (Ottale) | HEX (esadecimale) | BIN (rappresentazione binaria) | Carattere rappresentato | Descrizione |
|---|---|---|---|---|---|
| 7 | 007 | 07 | 00000111 | BEL | Bell |
Questo particolare carattere, con descrizione "bell", molto probabilmente serviva per comandare alla telescrivente di suonare la piccola 🔔 campanella 🔔 di cui era dotata, (suppongo che venisse usata per segnalare agli operatori lo stato della macchina)
Non so voi, ma il mio computer NON è dotato di una campanella integrata. Mi sembra ragionevole dire quindi che questo carattere è una dimostrazione di come la tabella ASCII porti ancora dentro di sé i segni dell'epoca in cui veniva utilizzata per le telescriventi, e non per i computer come li intendiamo noi oggi.

Foto di una telescrivente: Foto di Pasquale Troccoli, CC BY-SA 3.0 https://creativecommons.org/licenses/by-sa/3.0, via Wikimedia Commons
Per concludere, la tabella ASCII è la dimostrazione di come il codice binario possa rappresentare praticamente tutto ciò che vogliamo fargli rappresentare. E' solo necessario riuscire a trovare un modo di far corrispondere la informazione che vogliamo trasmettere o memorizzare (un carattere nel caso della tabella ASCII) ad una sequenza binaria di una determinata lunghezza.
Fonte per le informazioni riguardo alle telescriventi: QUI
Sito da cui ho recuperato la tabella ASCII (così come molte informazioni riguardo ai caratteri di controllo): QUI
Foto della telescrivente: QUI
Data: 03/01/25
Pagina successiva inerente al progetto: QUI