Tutorials - Informatica

 

Decimali, Binari & C

BCD comune, mezzo byte...


 

BCD comune, mezzo byte ...

Come abbiamo detto, Si usa definire "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

 

Che senso ha questa ulteriore definizione ?  
Ha importanza perchè un byte si presta ad un' altra forma di codifica dei numeri : il BCD.

BCD termine si indica una codifica dei numeri decimali usando le cifre ad 0 a 9 .

BCD è acronimo Binary Coded Decimal, ovvero codifica binaria di numeri decimali.
Cerchiamo di capire la cosa attraverso qualche esempio.

Se limito nell' esadecimale le cifre a 9 più lo zero, posso far stare in un byte numeri da 00 a 99 :

 

HEX
minimo 00
massimo 99

 

e mi stabilisco allora una convenzione che dice : " il numero che la cifra rappresenta è proprio il numero decimale", ovvero 01 è 1, 22 è 22 e 99 è 99, anche se utilizzo un byte per supportarli. 
Non è più "esadecimale", ma una nuova codifica, il BCD.

 

Chiariamo che BCD non è un sistema di numerazione come quelli fino ad ora visti, bensì una convenzione per rappresentare i numeri decimali in un mezzo (il computer) che funziona con il sistema binario.

 

77 in BCD non può essere definito come 77baseBCD  perchè non è un sistema di numerazione. 
Per distinguere 77base16 da  77base8, 77base10 e 77 in BCD dovrò usare altri sistemi che vedremo più avanti.

Per ora, facciamo una tabella  :

HEX

BINARIO

DECIMALE
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
minimo 00 0 0 0 0 0 0 0 0 0
massimo 99 1 0 0 1 1 0 0 1 99

 

Se osservo i nibble, vedo chiaramente che ogni nibble contiene una cifra decimale. Questo "pacchetto" di due cifre decimali stipate in un byte si chiama BCD compresso. 

Ovviamente 9A o BB NON sono numeri BCD validi in quanto BCD ammette solo le cifre da 0 a 9.

 

Se dovessi scrivere il decimale 765 lo farei usando 12 bit, ovvero 12 cifre binarie, che sono poi tre cifre esadecimali :

765 decimale

BINARIO

bit 11 bit 10 bit 9 bit 8 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
0 1 1 1 0 1 1 0 0 1 0 1
HEX
7 6 5

 

Se osserviamo, le cifre del numero decimale sono le stesse di quello esadecimale (dato che in BCD non possiamo usare altro che le cifre da 0 a 9) corrispondente, per cui, se non chiarisco la codifica usata, 765 può essere tanto   765base16 quanto 765bcd  che è poi  765base10.

Questo aspetto del problema sarà chiarito più avanti. Per ora possiamo considerare che questo è un vantaggio, in quanto il numero è lo stesso e non devo fare operazioni di conversione.

Ancora, per chiarire meglio la differenza, con tre cifre esadecimali il massimo esprimibile è FFF. 

BINARIO

bit 11 bit 10 bit 9 bit 8 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
1 1 1 1 1 1 1 1 1 1 1 1
HEX
F F F

che equivale a 4095 decimale.

Con tre cifre BCD il massimo esprimibile è 999 (... non posso usare cifre oltre il 9, anche se con 4 bit binari potrei arrivare a F): 

BINARIO

bit 11 bit 10 bit 9 bit 8 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
1 0 0 1 1 0 0 1 1 0 0 1
BCD
9 9 9

 

Vediamone un' altro esempio , 1024 decimale :

1024 
decimale

BINARIO

bit 15 bit 14 bit 13 bit 12 bit 11 bit 10 bit 9 bit 8 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0
HEX
1 0 2 4


Con questo BCD e con l' aggiunta di istruzioni specifiche nel set del processore (SWAP, DAW, ecc) si può di contare direttamente in "BCD", ovvero in decimale, evitando l' operazione di conversione da esadecimale a decimale, in quanto i numeri nei bytes sono decimali..

Inoltre il BCD è l' anticamera dell' ASCII, il codice universalmente adottato per lai rappresentazione dei caratteri nei computer.


 

 

 

 

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