Decimali, Binari & C
Bit,
bytes, bin & hex
|
Bit, bytes, bin & hex
Però, si potrebbe obiettare, anche un sistema dove ci sono numeri del genere di
F0CA (= 61642
decimale) o CACCA (= 830666 decimale), CACA0 ( = 830624 decimale) o
BACC0 (= 765120
decimale) è, per lo meno, strano. Ma anche qui non è così.
(Attenzione che 0 è zero, non o maiuscolo... e i numeri si leggono effe zero
ci a, ci a ci ci a, ci a ci a zero, bi a ci ci zero, ecc..).
Esadecimale non è "strano", ma anzi : un numero
esadecimale è ideale per rappresentare un insieme di 8
elementi |
ovvero un gruppo di 8 cifre, di 8 bit, cioè un byte.
Dunque è diventato il modo comune
per scrivere i numeri nell' ambito dei computer (e non solo di quelli a 8 bit). Ora
osserviamo
meglio la tabella delle 16 cifre esadecimali :
Decimale |
Binario |
Esadecimale |
0 |
0000 |
0 |
1 |
0001 |
1 |
2 |
0010 |
2 |
3 |
0011 |
3 |
4 |
0100 |
4 |
5 |
0101 |
5 |
6 |
0110 |
6 |
7 |
0111 |
7 |
8 |
1000 |
8 |
9 |
1001 |
9 |
10 |
1010 |
A |
11 |
1011 |
B |
12 |
1100 |
C |
13 |
1101 |
D |
14 |
1110 |
E |
15 |
1111 |
F |
Vediamo che:
- una cifra esadecimale può essere rappresentata con quattro
cifre binarie.
- con 4 cifre binarie si codificano numeri decimali fino a
15.
Tutto conforme a quanto abbiamo spiegato finora.
In un processore a 8 bit, il bus dati è organizzato su 8 bit e così pure le periferiche e i 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. Immaginiamo ora che le linee siano 4, un gruppo
di 4 linee, o 4 bit. Quando sono tutte a zero le rappresento con 0000, quando sono
tutte a 1, le rappresento con 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 |
Quindi, con il valore binario di una linea, un bit, descrivo lo stato del
corrispondente circuito elettrico.
Se traduciamo queste cifre binarie in esadecimale e in decimale abbiamo:
BIT Accesi |
|
BINARIO |
HEX
|
DECIMALE |
bit 3 |
bit 2 |
bit 1 |
bit 0 |
tutti spenti |
|
0 |
0 |
0 |
0 |
0 |
0 |
bit 1 |
|
0 |
0 |
0 |
1 |
1 |
1 |
bit 2 |
|
0 |
0 |
1 |
0 |
2 |
2 |
bit 1 e 2 |
|
0 |
0 |
1 |
1 |
3 |
3 |
bit 3 |
|
0 |
1 |
0 |
0 |
4 |
4 |
bit 3 e 1 |
|
0 |
1 |
0 |
1 |
5 |
5 |
bit 3 e 2 |
|
0 |
1 |
1 |
0 |
6 |
6 |
bit 3, 2 , 1 |
|
0 |
1 |
1 |
1 |
7 |
7 |
bit 4 |
|
1 |
0 |
0 |
0 |
8 |
8 |
bit 4 e 1 |
|
1 |
0 |
0 |
1 |
9 |
9 |
bit 4 e 2 |
|
1 |
0 |
1 |
0 |
A |
10 |
bit 4, 2, 1 |
|
1 |
0 |
1 |
1 |
B |
11 |
bit 4 e 3 |
|
1 |
1 |
0 |
0 |
C |
12 |
bit 4, 3, 1 |
|
1 |
1 |
0 |
1 |
D |
13 |
bit 4, 3, 2 |
|
1 |
1 |
1 |
0 |
E |
14 |
tutti accesi |
|
1 |
1 |
1 |
1 |
F |
15 |
Il valore di un bit determina lo
stato di un pin di un port : ogni pin, una linea fisica, ogni linea fisica, un
bit. Descriverli con il binario, l' esadecimale o il decimale è lo stesso.
Possiamo vedere che il binario è perfettamente aderente, descrive nel modo
migliore lo stato dei bit. L' esadecimale ne è una versione
"compressa", mentre il decimale è quello più lontano. Anche se i n
umeri sono convertibili tra di loro senza difficoltà, l' immagine dei bit che
ci da il binario è la più chiara.
Ovviamente, scrivere 1111 in binario è come scrivere F in esadecimale (o 15 in
decimale). Allora F esadecimale equivale a 4 bit a livello 1, C esadecimale
equivale ai primi due bit a livello 1 e così via. :
bit 3 |
bit 2 |
bit1 |
bit 0 |
HEX |
Decimale |
1 |
1 |
0 |
0 |
C |
12 |
1 |
1 |
0 |
1 |
D |
13 |
1 |
1 |
1 |
0 |
E |
14 |
1 |
1 |
1 |
1 |
F |
15 |
Va ben notato che, come abbiamo visto per le buche dell' abaco,
il numero
cresce da destra a sinistra
e quindi
il bit di valore maggiore è quello
più a sinistra, quello con cui
comincia la serie delle cifre
Nell' esempio qui sopra, il bit di peso maggiore
è il bit 3; quello di peso minore è il bit 0.
Anche qui non c'è niente di strano: se scriviamo 1251, il primo uno vale
mille, l' ultimo vale 1.
Questo bit più significativo in inglese viene
definito MSB, Most Significant Bit.
Il primo a destra, il
meno significativo, in
inglese è LSB, Last Significant Bit.
Ora, i nostri gruppi di bit, nel processore a 8 bit, vanno appunto a
gruppi di 8. E un gruppo di 8 cosa è, in fondo ? L' accostamento di due gruppi
di 4, che prendono ciascuno il nome di "nibble".
"Nibble"
è la metà di un byte, ovvero i primi o gli
ultimi quattro bit. |
Così i bit da 7 a 4 costituiscono il nibble alto (high nibble) e i
bit da 3 a 0
il nibble basso (low nibble)
:
BINARIO |
ESADECIMALE |
High nibble |
Low nibble |
High nibble |
Low nibble |
bit 7 |
bit 6 |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bit1 |
bit 0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
A |
5 |
Con otto cifre binarie, due nibble da 4 bit ciascuna, posso rappresentare i numeri da 0 a 255 decimali,
ovvero da 0 a FF esadecimali.
|
BINARIO |
ESADECIMALE |
DECIMALE |
|
bit 7 |
bit 6 |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bit1 |
bit 0 |
minimo |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
|
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
2 |
2 |
|
|
|
|
|
|
|
|
|
... |
... |
|
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
E |
14 |
|
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
F |
15 |
|
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
10 |
6 |
|
|
|
|
|
|
|
|
|
... |
... |
|
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
FD |
253 |
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
FE |
254 |
massimo |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
FF |
255 |
Dunque, se devo accendere i bit 7, 5, 2 e 0, in un registro o in un port, questo lo rappresenterò con :
BINARIO |
ESADECIMALE |
DECIMALE |
bit 7 |
bit 6 |
bit 5 |
bit 4 |
bit 3 |
bit 2 |
bit1 |
bit 0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
A5 |
165 |
|