background image

Kody cyfr dziesiętnych

w systemie BCD

cyfra

kod BCD

0

0000

1

0001

2

0010

3

0011

4

0100

5

0101

6

0110

7

0111

8

1000

9

1001

Artykuł pobrano ze strony 

eioba.pl

Kod BCD

Istnieje wiele przykładów urządzeń, w których zastosowanie czystego kodu
dwójkowego jest nieekonomiczne z uwagi na ciągłą konieczność przeliczania liczb
pomiędzy systemami dziesiętnym i dwójkowym. Są to różnego rodzaju liczniki, kasy
sklepowe, kalkulatory, wagi itp. Dla nich opracowano specjalny kod zwany
systemem dziesiętnym kodowanym dwójkowo - BCD(ang. Binary Coded Decimal).

Idea kodu jest bardzo prosta - dwójkowo zapisujemy nie wartość
liczby lecz jej cyfry dziesiętne. Każda cyfra dziesiętna może być
przedstawiona w postaci wartości w 

naturalnym kodzie binarnym

.

Do tego celu potrzebne są 4 bity.  Kody poszczególnych cyfr
przedstawiliśmy w tabelce obok.
Aby odczytać wartość liczby BCD wystarczy podzielić jej kod na
grupy 4 bitowe. Każdą grupę zamieniamy zgodnie z tabelką na
cyfrę dziesiętną i otrzymujemy zapis liczby w systemie
dziesiętnym:

10000100

(BCD)

 = 1000 0100 = 84

(10)

010101110010

(BCD)

 = 0101 0111 0010 = 572

(10)

0011011110001001

(BCD)

 = 0011 0111 1000 1001 = 3789

(10)

W odwrotną stronę jest również prosto - każdą cyfrę dziesiętną zastępujemy 4
bitami z tabelki i otrzymujemy kod BCD:
72398015

(10)

 = 0111 0010 0011 1001 1000 0000 0001 0101

(BCD)

Jeśli bity liczby BCD zostaną przekonwertowane na 

system szesnastkowy

, to

otrzymane cyfry szesnastkowe odpowiadają dokładnie cyfrom dziesiętnym wartości
liczby BCD. Z tej własności często korzystają programiści zapisując kod BCD właśnie
w systemie szesnastkowym.
Kod BCD nie jest kodem efektywnym, ponieważ nie wykorzystuje wszystkich
możliwych kombinacji bitów w słówkach kodowych - sprawdź to w tabelce. Wynika z
tego oczywisty wniosek, iż niektóre słowa kodowe nie są dozwolone, gdyż nie
reprezentują cyfr dziesiętnych:

 
 
110111111010

(BCD)

 = 1101 1111 1010 = ???

(10)

8 bitowa liczba BCD zawiera dwie cyfry dziesiętne, zatem może przyjąć wartości z
zakresu od 00 do 99, co daje 100 słów kodowych. Tymczasem 8 bitów można ze
sobą połączyć na 256 (2

8

) sposobów. Zatem 156 słów kodowych nie będzie

wykorzystanych przez kod BCD - to więcej niż połowa? A jak sprawa ta przedstawia
się dla 16 bitów, 24 bitów i 32 bitów?
Cóż, czasami za wygodę w jednej dziedzinie, musimy coś poświęcić w innej
dziedzinie. Ostatecznie nadmiarowe słówka kodowe można wykorzystać do kontroli
poprawności kodu BCD - jeśli otrzymamy zabronioną kombinację bitów, to od razu
wiemy, że coś poszło źle.
Podchodząc do zagadnienia w sposób formalny, możemy wyprowadzić wzór, który na
podstawie stanu bitów liczby BCD pozwoli nam obliczyć jej wartość dziesiętną. W
tym celu rozważmy wagi pozycji 12-bitowej liczby BCD:

 Cyfra dziesiętna 

d

2

d

1

d

0

background image

Waga pozycji

800

10

2

2

3

400

10

2

2

2

200

10

2

2

1

100

10

2

2

0

80

10

1

2

3

40

10

1

2

2

20

10

1

2

1

10

10

1

2

0

8

10

0

2

3

4

10

0

2

2

2

10

0

2

1

1

10

0

2

0

 Cyfra dwójkowa  b

11

b

10

b

9

b

8

b

7

b

6

b

5

b

4

b

3

b

2

b

1

b

0

Waga i-tej pozycji w kodzie BCD ma wartość 10

[i/4]

 x2

mod4

. Wobec tego wzór na

wartość n-bitowej liczby BCD jest następujący:

b

n-1

...b

1

b

0

 = b

n-1

 x10

[(n-1)/4]

 x2

(n-1)mod4

 + ... + b

1

 x10

0

x2

1

+ b

0

 x10

0

 x2

0

Wzór do najprostszych nie należy i osobiście wątpię, czy ktokolwiek chciałby go
używać. Szybciej znajdziemy wartość liczby grupując bity i zamieniając je na cyfry
dziesiętne.

Najmniejszą wartość liczba BCD osiągnie dla wszystkich bitów równych 0. Czyli:

min

(BCD)

= 0

W celu wyznaczenia górnej granicy obliczamy liczbę d pełnych cyfr dziesiętnych
zakodowanych w czwórkach bitów liczby BCD. Liczbę tę znajdziemy jako część
całkowitą z dzielenia n przez 4:

d = [n : 4]

Każda pozycja dziesiętna może przyjąć maksymalnie wartość 9. I tak:

dla d = 1   max

(BCD)

= 9 = 10

1

 - 1

dla d = 2   max

(BCD)

= 99 = 10

2

 - 1

dla d = 3   max

(BCD)

= 999 = 10

3

 - 1

...

Widzimy, że górny kres jest równy:

max

(BCD)

=10

d

 - 1 = 10

[n : 4]

 - 1

Może się okazać, iż liczba BCD zawiera więcej bitów niż wielokrotność 4. W takim
przypadku najstarsze bity (których może być 0,1,2 lub 3) tworzą maksymalnie cyfrę
o wartości:

max

(BCD) Reszta

 = (2

mod4

 - 1) x 10

[n : 4]

Po zsumowaniu otrzymujemy ostatecznie:

max

(BCD) Całość

 = max

(BCD)

 + max

(BCD) Reszta

max

(BCD) Całość

 = 10

[n : 4]

 - 1 + (2

mod 4

 - 1) x 10

[n : 4]

max

(BCD) Całość

 = 10

[n : 4]

 + (2

mod 4

 - 1) x 10

[n : 4]

 - 1

max

(BCD) Całość

 = 10

[n : 4]

x (1 + 2

mod 4

 - 1) - 1

max

(BCD) Całość

 = 10

[n : 4]

x 2

mod 4

 - 1

 

 

 

 

 

 

Zakres n-bitowych liczb w kodzie BCD wynosi

Z

(BCD)

 = 0 ... 10

[n : 4]

x 2

mod 4

 - 1

 

 

   

 

 
Obliczyć zakres 10-bitowych liczb zapisanych w kodzie BCD.

Z

(BCD)

 = 10

[10 : 4]

 x2

10 mod 4

 - 1

Z

(BCD)

 = 10

[2,5]

 x2

2

 - 1

Z

(BCD)

 = 10

2

 x2

2

 -

Z

(BCD)

 = 100 x4 - 1

Z

(BCD)

 = 400 - 1

background image

Z

(BCD)

 = 399

Ponieważ liczby w kodzie BCD nie są naturalnymi liczbami dwójkowymi, zatem nie
można nad nimi wykonywać normalnych działań arytmetycznych. Sprawdźmy:

15 + 35

0001 0101

+   0011 0101

     

24 -15

0010 0100

- 0001 0101

0100 1010

Wynik zły!

 

0000 1111

Wynik zły!

Po wykonaniu standardowej operacji nad liczbami w kodzie BCD należy sprawdzić i
w razie potrzeby skorygować wynik. Dla dodawania i odejmowania korekcja będzie
potrzebna wtedy, gdy dana grupa bitów reprezentujących cyfrę dziesiętną ma
wartość większą od 9 (binarnie 1001). W takiej sytuacji do grupy tej należy dodać
(dla odejmowania odjąć) wartość binarną 0110 (dziesiętnie 6). Sprawdźmy
ponownie (kolorem czerwonym zaznaczyliśmy korekcję wyniku):

15 + 35

0001 0101

+   0011 0101

     

24 -15

0010 0100

- 0001 0101

0100 

1010

+ 0000 

0110

 

0000 

1111

- 0000 

0110

0101 0000

Wynik = 50

 

0000 1001

Wynik = 9

Korekcja musi również wystąpić, gdy w trakcie dodawania wystąpiło przeniesienie
(przy odejmowaniu pożyczka) do sąsiedniej grupy bitów. Np:

29 + 19

0010 1001

+   0001 1001

     

31 -18

0011 0001

- 0001 1000

010

00010

+ 0000 

0110

 

000

11001

- 0000 

0110

0100 1000

Wynik = 48

 

0001 0011

Wynik = 13

 

 

 

 

 

 

W systemie BCD korekcja przy dodawaniu polega na dodaniu (lub odjęciu przy
odejmowaniu) do grupy bitów reprezentujących cyfrę dziesiętną liczby 0110 (6).
Korekcję wykonujemy, gdy po operacji arytmetycznej:

grupa bitów nie przedstawia cyfry dziesiętnej
nastąpiło przeniesienie (pożyczka) do następnej grupy bitów

 

 

   

 

 

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji

GNU Free Documentation License.

Autor: mgr Jerzy Wałaszek
Przedruk ze strony: 

http://www.i-lo.tarnow.pl/edu/inf/alg/num/index.html

Artykuł pobrano ze strony 

eioba.pl