logo
AOM / Мельник А

2.6.5.7. Двійково-кодовані десяткові числа

Вище було показано представлення в комп'ютері даних у двійковій системі числення. Далі розглянемо, як ці внутрішні дані можуть бути перетворені у форму, яка піддається інтерпретації людиною.

Двійково-кодоване десяткове число - це десяткове число, кожна цифра якого пред­ставлена в двійковій формі. Одна з перших числова система кодування десяткових чисел двійковим кодом (Binary-coded decimal - BCD) була використана в великих і середнього розміру комп'ютерних системах фірми IBM. Система BCDкодує кожну цифру десят­кового числа 4-розрядним двійковим кодом. Коли використовується 8-розрядне число, тобто байт, то старші 4 біти називають зоною, а молодші - цифрою. Ця домовленість прийшла з часів перфокарт, де кожна колонка карти могла мати "зональний отвір" в од­ній з двох верхніх стрічок і "цифровий отвір" в одній з десяти нижніх стрічок. Старші чотири розряди в байті BCDвикористовуються для представлення знаку, який може мати одне з трьох значень: число без знаку представляється кодом 1111; додатне число

73

представляється кодом 1100; від'ємне число представляється кодом 1101. Кодування для двійково-кодованих десяткових чисел показане в табл. 2.8.

Таблиця 2.8

Цифра

Код BCD

0

0000

1

0001

2

0010

3

0011

4

0100

5

0101

6

0110

7

0111

8

1000

9

1001

Зони

1111

Без знаку

1100

Додатне

1101

Від'ємне

Як видно з таблиці, шість можливих двійкових значень (від 1010 до 1111) не викорис­товуються. Хоча втрачається приблизно 40 % можливих значень, але набуваються значні переваги в точності. Наприклад, десяткове число 0.3, перетворене в двійковий код та об­межене 8-розрядною сіткою, при зворотному перетворенні має значення 0.296875, тобто похибка складає приблизно 1.05 %. В коді BCDчисло запам'ятається безпосередньо як 1111 0011, не допускаючи жодної помилки.

Цифри в коді BCDзаймають лише чотири розряди, тому можна зберегти місце і спростити обчислення, розмістивши поряд числа з одним знаком. Цей процес назива­ється пакуванням, а сформовані числа - пакованими десятковими числами.

Приклад:

Подамо число -1265 трьома байтами, використовуючи паковані цифри коду BCD.

Зонне десяткове кодування для числа 1265 є наступним:

11110001 11110010 11110110 11110101

Після пакування отримаємо:

00010010 0110 0101

Додавши знак після цифри молодшого розряду і заповнивши цифру старшого роз­ряду одиницями до 3 байтів, отримаємо:

111100010010 0110 0101 1101.

Код BCD(або його іще називають кодом 8421) знайшов найбільше поширення в об­числювальній техніці. Цей код зручний для виконання перетворення з десяткової сис­теми у двійкову і навпаки. Цей код адитивний, тобто сума представлення двох цифр є кодом їх суми.

Разом з тим, використання цього коду пов'язане з труднощами пошуку переносу в наступний десятковий розряд і важкістю переходу до оберненого та доповняльного коду для десяткових чисел. Це пояснюється тим, що код 8421 не є самодоповнюючим, тобто

74

інверсія його двійкових цифр не дає коду доповнення десяткової цифри до 9. В табл. 2.9 наведено інші широко вживані двійково-десяткові коди, а саме код з надлишком 3 та код 2 з 5. Можна побудувати й інші двійково-десяткові коди, наприклад 2421, 5121 тощо.

Таблиця 2.9

Десяткові цифри

Код 2 з 5 надлишком 3

Код 2 з 5

0

0011

11 000

1

0100

00 011

2

0101

00 101

3

0110

00 11О

4

0111

01 001

5

1000

01 010

6

1001

01 100

7

1010

10 001

8

1011

01 001

9

1100

10 100

Код з надлишком 3 зручний при виконанні арифметичних операцій над десятковими цифрами, оскільки він є самодоповнюючим. Крім того, легко визначається перенос, так як сума двох доданків, кожне з яких береться з надлишком 3, вийде з надлишком 6, що виключає лишні кодові комбінації. Для отримання правильного коду суми з отриманого результату відкидається 3. У деяких випадках для використання суттєво, що код нуля містить 1 і тому легко відрізнити наявність коду нуля від пропадання коду цифри. Код з надлишком 3 не дуже зручний для перетворення чисел з однієї системи числення в іншу. В коді 2 з 5 десяткові цифри зображаються п'ятьма розрядами, причому кожне значення містить дві 1. Ця надлишковість використовується для контролю правильності передачі цифри. Будь-яка помилка в одному розряді перетворює 0 в 1 або 1 в 0, в результаті ви­йде більше або менше двох 1, що вкаже на помилку. При одночасній появі двох помилок можливі випадки, коли їх можна не знайти (якщо 0 в одному розряді перетворюється в 1, а в іншому розряді 1 в 0).