Tutorials - Informatica

 

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

 



 

 

 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 18/10/10.