kod bcd

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

i 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

n 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

n mod 4

- 1) x 10

[n : 4]

max

(BCD) Całość

= 10

[n : 4]

+ (2

n mod 4

- 1) x 10

[n : 4]

- 1

max

(BCD) Całość

= 10

[n : 4]

x (1 + 2

n mod 4

- 1) - 1

max

(BCD) Całość

= 10

[n : 4]

x 2

n mod 4

- 1

Zakres n-bitowych liczb w kodzie BCD wynosi

Z

(BCD)

= 0 ... 10

[n : 4]

x 2

n 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


Wyszukiwarka

Podobne podstrony:
jak zmienic liczby na kod BCD dinary coded decimal, PHP Skrypty
04) Kod genetyczny i białka (wykład 4)
1 kod kresk
kod matlab
Zgłoszenie wypadku przy pracy osoby nie będącej pracownikiem
Gazeta Wyborcza a kod kulturowy judaizmu
105 - Kod ramki, RAMKI NA CHOMIKA, Miłego dnia
niebieskie 2, ❀KODY RAMEK I INNE, Gotowe tła do rozmówek
54 - Kod ramki, RAMKI NA CHOMIKA, Gotowe kody do małych ramek
140 - Kod ramki
28 - Kod ramki(1), RAMKI NA CHOMIKA, Gotowe kody do średnich ramek
17 - Kod ramki, ❀KODY RAMEK I INNE, Ramki
179 - Kod ramki - szablon
265 - Kod ramki - szablon, ◕ ramki z kodami

więcej podobnych podstron