Hex-a-decimaal en BCD

Een normaal decimaal cijfer kan 10 verschillende waarden aannemen, namelijk 0 t/m 9.
Een hex-a-decimaal getal (hex betekent 6) kan 16 verschillende waarden hebben (grondtal 16).
De waarden van dit talstelsel zijn 0 t/m 9 en A t/m F.
De letters komen overeen met de getallen 10 t/m 15 volgens het decimale stelsel.
Dit talstelsel wordt toegepast om binaire getallen verkort weer te geven.

0 0 1 0
1 1 0 1
 = Binaire byte (8 bits)
2 + D  = 2D  Hexadecimaal getal


Wat is er nu zo makkelijk aan hexadecimaal?
Als je een binair getal ziet, bijvoorbeeld %00110100, en je hakt dit binaire getal doormidden, dus 0011 en 0100, dan kun je daar vrij snel de hexadecimale waarde uithalen.
Namelijk 0011 (=3) en 0100 (=4).
Dus de hexadecimale waarde van %00110100 = $34.

Een paar voorbeelden:
0011 0011 = $33
0100 0111 = $47
1111 1000 = $F8
Alleen de waarden A t/m E zul je aan moeten wennen, de F is alle bits aan, dus dat is makkelijk te onthouden.

Om uit een binair getal een decimaal getal te halen valt niet zomaar in één oogopslag te zien, omdat er geen enkel logisch verband tussen die getallen zit.

Uit 4 bits zijn 16 mogelijkheden van enen en nullen te maken, 0000 = 0, 0001 = 1, 0010 = 2...1111 = 15, zie de tabel onderaan.


Wat is BCD?
B
inary Coded Decimal, is een vierbits code om de decimale cijfers 0 t/m 9 weer te geven (grondtal 10).
BCD telt gewoon zoals we dagelijks tellen in decimalen, alleen wordt dit nu binair weergegeven.
Het getal 31 bijvoorbeeld is binair %00011111, maar in BCD 0011 0001 (de '3' staat hier links, de '1' rechts), zie de tabel onderaan.

Omzetten van BCD naar decimaal in PIC Basic kan als volgt:

  MyByte = ((MyBCD >> 4 ) * 10 ) + (MyBCD & 15 )

Of, als het dezelfde variabele moet blijven die alleen maar omgezet moet worden:

  MyByte = ((MyByte >> 4 ) * 10 ) + (MyByte & 15 )

 
Omzetten van decimaal naar BCD in PIC Basic kan als volgt:

  MyBCD = ((MyByte / 10 ) << 4 ) + (MyByte // 10 )

Of, als het dezelfde variabele moet blijven die alleen maar omgezet moet worden:

  MyByte = ((MyByte / 10 ) << 4 ) + (MyByte // 10 )

 


Decimaal  Hex Binair BCD
0   00 00000000 0000 0000
1   01 00000001 0000 0001
2   02 00000010 0000 0010
3   03 00000011 0000 0011
4   04 00000100 0000 0100
5   05 00000101 0000 0101
6   06 00000110 0000 0110
7   07 00000111 0000 0111
8   08 00001000 0000 1000
9   09 00001001 0000 1001
10   0A 00001010 0001 0000
11   0B 00001011 0001 0001
12   0C 00001100 0001 0010
13   0D 00001101 0001 0011
14   0E 00001110 0001 0100
15   0F 00001111 0001 0101
16   10 00010000 0001 0110
17   11 00010001 0001 0111
18   12 00010010 0001 1000
19   13 00010011 0001 1001
20   14 00010100 0010 0000
21   15 00010101 0010 0001
22   16 00010110 0010 0010
23   17 00010111 0010 0011
24   18 00011000 0010 0100
25   19 00011001 0010 0101
26   1A 00011010 0010 0110
27   1B 00011011 0010 0111
28   1C 00011100 0010 1000
29   1D 00011101 0010 1001
30   1E 00011110 0011 0000
31   1F 00011111 0011 0001
32   20 00100000 0011 0010
33   21 00100001 0011 0011
etc. etc. etc. etc.