Kod BCD przypisuje każdej cyfrze liczby dziesiętnej jej wartość zapisaną binarnie na czterech pozycjach. Kodując pojedynczą cyfrę można skorzystać z poniższej tabelki:
Cyfra | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
Kod BCD | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 |
W przypadku kodowania liczb złożonych z wielu cyfr każdą liczbę należy zamienić oddzielnie na kod BCD. Przykładowo 908 to 100100001000BCD. Chcąc przeliczyć zakodowaną liczbę z powrotem na dziesiętny system wystarczy pogrupować cyfry po cztery i przeliczyć kod binarny na dziesiętny. Przykładowo 00010011BCD = 13.
Jak nietrudno zauważyć bardzo łatwo można zakodować i rozkodować kod BCD. Warto jednak zauważyć, że tego typu kodowanie nie jest efektywne, ponieważ na czterech bitach można zapisać 16 różnych wartości, a wykorzystywanych jest zaledwie 10. Z tego powodu kodowanie to nie jest już praktycznie używane.
Funkcja kodujBCD() zamienia liczbę dziesiętną w kod BCD. W wyniku otrzymywany jest tekst złożony z samych 0 i 1.
W trakcie zamiany należy pamiętać, że kolejne cyfry liczby są wybierane z jej końca, a więc należy pamiętać, aby je dołączać na początku wyniku, a nie na końcu. W celu przeliczania z liczb na tekst wykonywane są operacje binarne, aby otrzymać odpowiedni bit, a następnie jest on zamieniany na cyfrę.
W celu zamiany kodu BCD na dziesiętny należy skorzystać z dekodujBCD(). Jako argument przyjmuje ona kod BCD zapisany jako tekst, a w wyniku otrzymuje się liczbę dziesiętną.
Podczas dekodowania należy odczytywać po 4 kolejne znaki i przyjąć, że każdy z nich ma kolejno wagę 8, 4, 2, 1. Po zsumowaniu wszystkich wag pozycji z wartościami 1 otrzymujemy zakodowaną cyfrę, którą należy dołączyć z lewej strony kodu.
Do przetestowania kodu można skorzystać z poniższego fragmentu kodu, która wczytuje od użytkownika liczbę do zamiany na kod BCD, a następnie dekoduje i wyświetla obydwie obliczone wartości.
Najmniejszym typem danych jest bajt składający się z 8 bitów. Oznacza to, że w każdym bajcie można zmieścić dwie cyfry. W przypadku, gdy bardziej znaczącej części bajtu nie odpowiada żadna wartość to jest ona ustawiona np. na 1111. Jeśli kod BCD został zapisany jako tablica bajtów i każda cyfra używa tylko pół bajtu to nazywany taki kod upakowanym. Później przed dekodowaniem należy go rozpakować.
Napisz program, który pozwoli na upakowanie liczby ośmiocyfrowej w zmiennej całkowitoliczbowej czyli np. int o rozmiarze 4 bajtów czyli zdolnej pomieścić 8 cyfr zakodowanych poprzez kod BCD. Dopisz również funkcję do rozpakowania takiej wartości i zamiany jej na liczbę dziesiętną.
Przykładowo liczbie 1234 zakodowanej jako BCD odpowiada 0001001000110100(, ale kod zapisany w zmiennej całkowitoliczbowej będzie miał wartość 4660).