Decimali, Binari & C
Numeri binari e bit
|
Numeri Binari e Bit
Abbiamo già detto che le cifre di una numerazione binaria prendono il
nome di bit.
Se vogliamo rappresentare in modo grafico la corrispondenza delle colonne e
del loro valore :
colonna |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
bit |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
^2 |
216 |
215 |
214 |
213 |
212 |
211 |
210 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
decimale |
65535 |
32768 |
16384 |
8192 |
4096 |
2048 |
1025 |
512 |
256 |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
Possiamo notare come, parlando di colonne, diciamo la prima, la seconda, ecc.
Mentre parlando di bit, il bit più a destra non è il bit 1 ma il bit 0.
Questo è facilmente comprensibile osservando che la serie delle potenze di due
corrispondenti alle colonne parte da 0 ( 20 = 1); è ragionevole
quindi che anche il bit corrispondente abbia una numerazione analoga.
Dunque,in un insieme di bit
il primo bit a destra
non è il bit 1, ma è il
secondo; il primo bit è il bit 0.
E il primo bit a sinistra di un byte (8 bit)
non è il bit 8, ma il bit 7 (il suo esponente di posizione è 7 e il suo valore va moltiplicato per 27).
Dunque è chiara la corrispondenza del valore in una colonna con il bit
corrispondente in un insieme di bit.
Per ragioni pratiche e logiche, gli insiemi di bit, nell' organizzazione di
un computer, non sono casuali, ma sono raggruppamenti di 4, 8, 16, 32, 64 o più
bit, a gruppi che sono potenze di 2..
In particolare, nei microcontroller si utilizzano gruppi di 8 o 16 bit.
Un gruppo di 8 bit
prende il nome di "byte"
E questo insieme di bit organizzati
solitamente a gruppi di 8 (= 1 byte) costituiscono i registri del processore, le
celle di memoria, i port di I/O.
8 bit = 1 byte
per curiosità il nome byte deriva dall' inglese bite (che significa un
pezzo, nel parlare comune, più grande di un bit) e rinominato con la y per
evitare confusioni.
Dunque, se in un registro di memoria del processore voglio scrivere il numero
decimale 100, lo devo convertire in binario, il che da 1100100 ed è questo
quanto sarà scritto nella locazione di memoria.
In che modo ?
Facendo corrispondere ad ogni 1 una tensione elettrica "a livello alto",
ad esempio 5 volt e ad ogni 0 una tensione logica "a livello basso",
ad esempio zero volt.
Dunque, il nostro registro di memoria contiene otto celle in ognuna delle quali
viene portata a 5 volt oppure a zero volt.
Registro memoria |
5 V |
5 V |
0 V |
0 V |
5 V |
0 V |
0 V |
0 V |
Le celle sono ordinate dalla prima a destra all' ottava a sinistra, nel modo
che abbiamo già visto per i numeri binari. Sono otto e quindi possiamo definire
questo insieme "un byte" e chiamare ogni cella "un bit":
Colonna |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Registro memoria |
5 V |
5 V |
0 V |
0 V |
5 V |
0 V |
0 V |
0 V |
Ma i livelli di tensione contenuti in ogni cella non sono che l' equivalente
elettrico delle cifre binarie, Allora sostituisco questi valori con le cifre
corrispondenti:
Colonna |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Registro memoria |
5 V |
5 V |
0 V |
0 V |
5 V |
0 V |
0 V |
0 V |
Binario equivalente |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
Ecco come con i numeri binari posso rappresentare la situazione di un
circuito elettrico e, viceversa, rendere nel circuito elettrico una serie di
cifre binarie.
La stessa cosa vale per i registri di ingresso e di uscita del
microcontroller. In questo caso faccio corrispondere ogni cella (ogni bit) del
registro con un piedino del processore, accessibile dall' esterno: il livello
interno della tensione sarà riportato all' esterno.
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Valore |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
Registro memoria |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
Pin dell' I/O |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
Pin |
5 V |
5 V |
0 V |
0 V |
5 V |
0 V |
0 V |
0 V |
Ecco come si equivalgono stati elettrici e numeri binari.
Se, con il circuito esterno, faccio si che quando la tensione sul pin è a 5
V si accenda un LED, che invece è spento quando il livello è 0 V, trasformo la
sequenza di bit binari in una sequenza di stati elettrici che comandano
dispositivi:
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Valore |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
I/O port |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
Pin |
5 V |
5 V |
0 V |
0 V |
5 V |
0 V |
0 V |
0 V |
LED |
|
|
|
|
|
|
|
|
Ovviamente posso fare anche un circuito che faccia l' inverso, ovvero accenda
il LED quando il pin è a 0, ma per ora questo è poco importante. E per ora non
è neppure indispensabile conoscere come sia il processo che porta a 5 V o a 0 V
la tensione nei registri. Quello che importa, ora, è cominciare a capire il
meccanismo che rende la numerazione binaria immagine dello stato di un circuito
elettrico.
Quello che
importa è comprendere che questa equivalenza:
numero binario - registro del
processore - stato elettrico
che è poi quello su cui si basa l' elaborazione elettronica e l'
automazione con i processori.
Si può dire certamente che un sistema binario, a parte per il prof. XvYzz
e per la sua pinza, parrebbe assolutamente insensato. Ma non è così.
Infatti, se consideriamo che
un sistema binario si adatta perfettamente a descrivere
il funzionamento di un circuito elettrico
1 = acceso, 0 = spento.
E i computer
sono circuiti elettrici. Anzi, i primi elaboratori matematici erano a relè
(contatto aperto / contatto chiuso).
Questa considerazione trova supporto fondamentale nel lavoro del matematico-filosofo
George Boole (1815-1864). Egli considerava
possibile applicare alla logica le leggi e
simboli dell' algebra, dando origine ad una branca della matematica che
viene chiamata Algebra di Boole o booleana. e che costituisce la base dei
successivi lavori di De Morgan, Shannon, Turing e su cui si basa il calcolo
elettronico.
Se per noi le catene di 1 e 0 che costituiscono i numeri
binari sono di difficile maneggio, questo non è per le macchine, la cui
possibilità di effettuare miliardi di operazioni semplici al secondo rende poco
significativa l' apparente scomodità del sistema binario.
In un processore a 8 bit, i dati sono organizzati su 8 bit e così pure periferiche e
port sono organizzati su 8
bit.
Ad ogni bit posso assegnare il livello alto o basso, 1 o 0.
Quindi un gruppo di 8 bit può essere rappresentato dalle cifre binarie 00000000 se
tutti i bit sono a zero per arrivare fino a 11111111 quando tutti i bit valgono
1. Ma abbiamo detto che: possiamo collegare un circuito acceso, o un
livello logico alto, alla cifra 1
e un circuito spento, o a livello
basso, alla cifra 0. Il collegare nella realtà questi 1 e 0 a livelli di tensione, fa si che,
ad esempio, il livello di tensione alto, rappresentato con 1, faccia accendere
una lampadina e il valore 0, basso, la faccia spegnere : è il principio del
controllo attraverso l' elettronica.
Abbiamo detto che facciamo equivalere 1 a 5 V, ma questo è solo un esempio, in
quanto il "livello logico alto" potrà assumere valori differenti a
seconda della tensione con cui alimentiamo il circuito (e delle caratteristiche
costruttive).
Per cui, invece di parlare di volt, lo stato dei bit viene definito con altri
termini equivalenti :
1 |
alto |
H |
set |
acceso |
0 |
basso |
L |
clear |
spento |
Per cui la tabella più sopra potrà essere riscritta così:
Bit |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Valore |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
I/O port |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
Pin |
H |
H |
L |
L |
H |
L |
L |
L |
LED |
|
|
|
|
|
|
|
|
A seconda del numero di bit disponibili si potranno immagazzinare, come già
detto, numeri differenti e azionare gruppi di linee corrispondenti. Ad
esempio, con 4 bit, potranno variare tra 0000 e 1111. Se ci attacco i LED, questi saranno tutti
spenti quando le linee sono a 0 e tutti accesi quando le linee sono a 1.
bit3 |
bit2 |
bit1 |
bit0 |
Stato |
0 |
0 |
0 |
0 |
tutti spenti |
1 |
1 |
1 |
1 |
tutti accesi |
Certamente avrò anche tutte le possibili combinazioni intermedie :.
bit3 |
bit2 |
bit1 |
bit0 |
BIT Accesi |
0 |
0 |
0 |
0 |
tutti spenti |
0 |
0 |
0 |
1 |
bit 1 |
0 |
0 |
1 |
0 |
bit 2 |
0 |
0 |
1 |
1 |
bit 1 e 2 |
0 |
1 |
0 |
0 |
bit 3 |
0 |
1 |
0 |
1 |
bit 3 e 1 |
0 |
1 |
1 |
0 |
bit 3 e 2 |
0 |
1 |
1 |
1 |
bit 3, 2 , 1 |
1 |
0 |
0 |
0 |
bit 4 |
1 |
0 |
0 |
1 |
bit 4 e 1 |
1 |
0 |
1 |
0 |
bit 4 e 2 |
1 |
0 |
1 |
1 |
bit 4, 2, 1 |
1 |
1 |
0 |
0 |
bit 4 e 3 |
1 |
1 |
0 |
1 |
bit 4, 3, 1 |
1 |
1 |
1 |
0 |
bit 4, 3, 2 |
1 |
1 |
1 |
1 |
tutti accesi |
E così via per altri raggruppamenti di bit.
Se fino a qui è tutto chiaro, possiamo confondere le cose dicendo che la parola
byte non si associa solo a gruppi di 8 bit, anche se questo è il significato
più diffuso, ma si applica a qualsiasi sequenza ordinata di bit. Per cui si
può parlare di byte anche se i gruppi sono da 5 (come nella codifica Baudot) o
9 o 10 come in una trasmissione RS-232, oppure con l'architettura del
processore, che può essere stato costruito per lavorare con gruppi di 12 o 14 o
più bit..
Comunque, si è deciso di utilizzare nomi specifici per i raggruppamenti di
bit maggiori.
Si chiama
word
("parola") un gruppo di 2 byte
double word o dword,
un gruppo di 2 word, ovvero 4 bytes
Anche qui l valore esatto in bit varia con l'architettura. In sistemi con il
byte = 8 bit, si avrà:
1 word = 2 byte = 16 bit
1 dword = 2 word = 4 byte = 32 bit
Così un qword o quad word (abbreviazione di quadruple word)
è pari al quadruplo di una word.
Per curiosità, in inglese il plurale di bit è bits e di byte è bytes
e di word è words, ma è in uso non impiegare questi plurali quando si
scrive in italiano.
Altra curiosità è che in francese la terminolgia anche tecnica deve essere per
legge "riportata" a un termine francese, per cui il byte diventa un
octet (ma, d'altronde, il computer a Parigi è un ordinateur e un software
diventa un logiciel...)
|