💾 003 - Computer 8 bit - Codice binario 💾


Perchè il codice binario è "necessario"?:

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.

--
vishnu-mohanan-hus1z0tYELg-unsplash.jpg
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.


Il codice binario: 1 e 0:

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.


Il binario, un sistema di numerazione posizionale:

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:

  • Entrambe le codifiche, contengono un solo "1" al loro interno
  • Le due codifiche, rappresentano due numeri differenti.

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.


Il valore delle varie "posizioni":

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 è 0, ma nella posizione 1, dove nella codifica binaria compariva un "1", il risultato è 2.
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:

  • Il concetto di CIFRA PIU' SIGNIFICATIVA >>> La cifra posizionata nella posizione con il valore più elevato numericamente (nell'ultimo esempio, la cifra più significativa quindi è quella nella posizione 7)
  • Il concetto di CIFRA MENO SIGNIFICATIVA >>> La cifra posizionata nella posizione con valore 1 (perchè si trova nella posizione 0, che ha valore )(nell'ultimo esempio, la cifra meno significativa quindi è quella nella posizione 0)

Altri esempi di conversione da binario a decimale:

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:

  1. scrivere su un foglio di carta il numero in codifica binaria che si desidera convertire, messo in ordine dalla cifra più significativa a quella meno significativa.
  2. Numerare le posizioni occupate da ogni cifra, a partire dalla cifra meno significativa, partendo da 0.
  3. calcolare il valore di ogni posizione eseguendo il calcolo dove n è il numero della posizione
  4. Moltiplicare il valore di ogni singola posizione con la cifra in esso contenuta
  5. Sommare tra loro tutti i risultati del punto 4.

--

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

Conversione da decimale a binario:

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:

  1. Dividere (attraverso una divisione intera) il numero da convertire, per due, calcolando sia il quoziente (il risultato della divisione), che il resto.
  2. Se il quoziente non è zero, proseguire con le divisioni, continuando a dividere il quoziente della divisione precedente per due, sino a quando il quoziente non risulta essere zero.
  3. Nel mentre che si eseguono le divisioni, scrivere i vari resti partendo da sinistra ed andando verso destra.
  4. Una volta aver raggiunto una divisione che abbia come quoziente zero, ed aver concluso il procedimento, i resti che sono stati scritti da DESTRA VERSO SINISTRA (non il contrario), SONO la codifica binaria che stavamo cercando.

--

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:

Pasted image 20250103221955.png

--

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!


Altri esempi di conversione da decimale a binario:

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

Il bit, il byte ed il nibble:

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:

  • IL BIT >>> Un bit, in pratica è una singola cifra binaria, che per l'appunto può essere solo "1" o "0".
  • IL NIBBLE >>> Equivalente ad una sequenza di 4 bit... una nomenclatura praticamente mai utilizzata, ma pur sempre utile da conoscere.
  • IL BYTE >>> Equivalente ad una sequenza di 8 bit, come per esempio "11011011" od una qualsiasi altra combinazione degli 8 bit di cui il byte è composto. Il byte inoltre, è considerato l'unità di misura fondamentale dell'informazione in informatica, tanto che quando diciamo "Questa chiavetta ha 16GB di memoria", ciò che stiamo dicendo è che la chiavetta è capace di contenere byte.

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:

  • WORD >>> Equivalente a 2 byte (16 bit).
  • DWORD >>> Equivalente a 4 byte (32 bit).
  • QWORD >>> Equivalente a 8 byte (64 bit).

Binario, non solo numeri!:

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.


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.

2048px-Telescrivente_CEP_-_Calcolatrice_Elettronica_Pisana.jpg
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