Двійко́во-десятко́вий код (ДДК, англ. BCD, binary-coded decimal) — спосіб представлення десяткового числа, у якому кожній цифрі відповідає певна послідовність двійкових розрядів. Цей код (а точніше, його різновид 8421-ДДК) спрощує (ввід/вивід) числа у десятковому вигляді, використовується у калькуляторах та при роботі над числами з нерухомою комою (наприклад, з грішми) для забезпечення належної точності підрахунків. Реалізація BCD-арифметики досить проста, тому вона присутня у наборах інструкцій майже всіх мікропроцесорів та мікроконтролерів.
Найпростішим варіантом є 8421-ДДК, який означає, що кожна цифра десяткового числа записується своїм двійковим представленням з доповненням нулями до 4 розрядів (тетрада). Наприклад, число 309110, при кодуванні у 8421-ДДК буде виглядати як 0011 0000 1001 0001 2
Правила побудови ДДК
Оскільки всього існує 10 десяткових цифр, а одна тетрада (4 біти) може визначати 24 = 16 різних комбінацій, то очевидно, що існує більше ніж один можливий варіант побудови ДДК. Кількість можливих комбінацій дорівнює . Більшість цих можливих комбінацій подібні, тому для стандартизації був вибраний спеціальний алгоритм генерації ДДК.
Кожному розряду ДДК ставиться якась фіксована вага. Умови побудови коду:
- Ваги розрядів розміщуються у порядку зростання (від молодшого розряду до старшого)
- Вага найменшого розряду q0 дорівнює 1
- Вага наступного розряду q1 дорівнює 1 або 2
- Ваги інших 2 розрядів підбираються так, щоб їхня сума була більша або рівна 6 (якщо q1 = 2) або 7 (якщо q1 = 1)
- q3 <= q2 + q1 + q0 + 1
За такими правилами можлива побудова 17 різних кодів: 8-4-2-1, 7-4-2-1, 6-4-2-1, 5-4-2-1, 4-4-2-1, 7-3-2-1, 6-3-2-1, 5-3-2-1, 4-3-2-1, 3-3-2-1, 6-2-2-1, 5-2-2-1, 4-2-2-1, 6-3-1-1, 5-3-1-1, 4-3-1-1, 5-2-1-1
Кодування
Для перетворення десяткової цифри у ДДК потрібно визначити, ваги яких розрядів утворюють у сумі дану цифру і поставити на їх місце одинички, а інші розряди заповнити нулями. Так, при кодуванні цифри 5 за допомогою 5221-ДДК видно, що q3 = 5, а отже 510 = 10005221-ДДК. Разом з тим, у даного коду є неоднозначність кодування, абсолютно коректним кодуванням буде 510 = 01115221-ДДК, оскільки q2 + q1 + q0 = 5. Неоднозначність кодування присутня у всіх кодах окрім 8421-ДДК.
Декодування
Декодування тетради ДДК відбувається як сумування ваг розрядів, навпроти яких записана 1 у двійковому представлені. Наприклад, 10106321-ДДК = 6·1 + 3·0 + 2·1 + 1·0 = 6 + 2 = 810. На відміну від кодування, декодування завжди однозначне.
Заборонені комбінації
Якщо у ДДК q3 + q2 + q1 + q0 > 9, то це означає, що код містить заборонені комбінації (ті, що декодуються у числа більші за 9, тобто, не у цифру). Деякі системи використовують заборонені комбінації для представлення знаку, десяткової крапки тощо.
BCD
BCD, який являє собою 8421-ДДК, виділяється серед інших двійково-десяткових кодів кількома особливостями:
- Ваги розрядів коду являють собою степені двійки, а отже кодування цифри зводиться до простого переведення у двійкову систему, що є досить відомою операцією
- Однозначне кодування — не може бути 2 тетрад, які будуть позначати одну цифру
- 6 заборонених комбінацій — їх можна використати для позначення знаку, десяткової крапки, експоненти тощо.
Через ці особливості (а точніше, через першу) даний ДДК зручно використовувати для збереження десяткових чисел у комп'ютерах. До переваг можна віднести елементарність операції округлення, елементарність множення на 10.
Упакований та неупакований формати
Оскільки мінімальною одиницею даних у процесорах як правило є байт, а не тетрада, то це призвело до появи двох форматів зберігання BCD в пам'яті. Неупакований формат зберігає кодовану цифру у молодшій тетраді байта, а старшу обнуляє. Упакований записує молодшу цифру у молодшу тетраду, а старшу — у старшу тетраду. Тому у неупакованому форматі один байт може містити числа від 0 до 9, а в упакованому — числа від 0 до 99. Неупакований формат зручний для перетворення цифри у ASCII-символ і округлення, а упакований — для арифметичних операцій і компактності даних. Процесори, які підтримують обидва формати, можуть містити також команди для переводу з одного формату в інший.
BCD-арифметика
Для процесорів, які націлені на двійкові арифметичні операції, виконання двійково-десяткових операцій не є складним, проте створює незручності для програміста. Це пов'язано з існуванням заборонених комбінацій. В даному прикладі показано, що в деяких випадках над упакованими BCD числами можна виконувати звичайні бінарні операції
0001 0001 + 0000 0110 = 0001 0111 1 1 + 0 6 = 1 7
Проте, якщо сума розрядів виявиться більшою за 9, то результат стане некоректним:
0001 1001 + 0000 0110 = 0001 1111 1 9 + 0 6 = 1 ####
Комбінація 1111 у 8421-ДДК є забороненою, тому результат виявився неправильним. Для розв'язання даної проблеми потрібно виконати десяткову корекцію числа після виконання арифметичної операції. Суть десяткової корекції у тому, що якщо у тетраді утворилась заборонена комбінація або відбувся перенос біта з 3 у 4 розряди (рахуючи від нульового), то до відповідної тетради результату додається число 610 або 01102:
0001 1001 + 0000 0110 = 0001 1111 1 9 + 0 6 = 1 #### + 0000 0110 --------- 0010 0101 2 5
0101 1001 + 0111 1001 = 1101 0010 5 9 + 7 9 = заборонена комб. був перенос біта + 0110 0110 ----------------------- (1) 0011 1000 3 8
Наявність біту переповнення після виконання операції означає, що відбувся перенос у розряд сотень. За рахунок даної особливості у деяких операціях діапазон двійково-десяткових чисел, які кодуються одним байтом, розширений від 0 до 199. У цьому випадку результат дорівнює (1) 38, тобто, число 138.
Посилання
- Двійково-десяткові коди (ДДК) [ 20 вересня 2011 у Wayback Machine.]
Література
- В. И. Юров. Assembler. — 2-е изд. — Санкт-Петербург : Питер, 2003. — 637 с. — .(рос.)
Цю статтю треба для відповідності Вікіпедії. (Грудень 2011) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Dvijko vo desyatko vij kod DDK angl BCD binary coded decimal sposib predstavlennya desyatkovogo chisla u yakomu kozhnij cifri vidpovidaye pevna poslidovnist dvijkovih rozryadiv Cej kod a tochnishe jogo riznovid 8421 DDK sproshuye vvid vivid chisla u desyatkovomu viglyadi vikoristovuyetsya u kalkulyatorah ta pri roboti nad chislami z neruhomoyu komoyu napriklad z grishmi dlya zabezpechennya nalezhnoyi tochnosti pidrahunkiv Realizaciya BCD arifmetiki dosit prosta tomu vona prisutnya u naborah instrukcij majzhe vsih mikroprocesoriv ta mikrokontroleriv Najprostishim variantom ye 8421 DDK yakij oznachaye sho kozhna cifra desyatkovogo chisla zapisuyetsya svoyim dvijkovim predstavlennyam z dopovnennyam nulyami do 4 rozryadiv tetrada Napriklad chislo 309110 pri koduvanni u 8421 DDK bude viglyadati yak 0011 0000 1001 0001 2Pravila pobudovi DDKOskilki vsogo isnuye 10 desyatkovih cifr a odna tetrada 4 biti mozhe viznachati 24 16 riznih kombinacij to ochevidno sho isnuye bilshe nizh odin mozhlivij variant pobudovi DDK Kilkist mozhlivih kombinacij dorivnyuye 16 16 10 16 6 2 6 10 10 displaystyle 16 cdot 16 10 16 cdot 6 approx 2 6 cdot 10 10 Bilshist cih mozhlivih kombinacij podibni tomu dlya standartizaciyi buv vibranij specialnij algoritm generaciyi DDK Kozhnomu rozryadu DDK stavitsya yakas fiksovana vaga Umovi pobudovi kodu Vagi rozryadiv rozmishuyutsya u poryadku zrostannya vid molodshogo rozryadu do starshogo Vaga najmenshogo rozryadu q0 dorivnyuye 1 Vaga nastupnogo rozryadu q1 dorivnyuye 1 abo 2 Vagi inshih 2 rozryadiv pidbirayutsya tak shob yihnya suma bula bilsha abo rivna 6 yaksho q1 2 abo 7 yaksho q1 1 q3 lt q2 q1 q0 1 Za takimi pravilami mozhliva pobudova 17 riznih kodiv 8 4 2 1 7 4 2 1 6 4 2 1 5 4 2 1 4 4 2 1 7 3 2 1 6 3 2 1 5 3 2 1 4 3 2 1 3 3 2 1 6 2 2 1 5 2 2 1 4 2 2 1 6 3 1 1 5 3 1 1 4 3 1 1 5 2 1 1 Koduvannya Dlya peretvorennya desyatkovoyi cifri u DDK potribno viznachiti vagi yakih rozryadiv utvoryuyut u sumi danu cifru i postaviti na yih misce odinichki a inshi rozryadi zapovniti nulyami Tak pri koduvanni cifri 5 za dopomogoyu 5221 DDK vidno sho q3 5 a otzhe 510 10005221 DDK Razom z tim u danogo kodu ye neodnoznachnist koduvannya absolyutno korektnim koduvannyam bude 510 01115221 DDK oskilki q2 q1 q0 5 Neodnoznachnist koduvannya prisutnya u vsih kodah okrim 8421 DDK Dekoduvannya Dekoduvannya tetradi DDK vidbuvayetsya yak sumuvannya vag rozryadiv navproti yakih zapisana 1 u dvijkovomu predstavleni Napriklad 10106321 DDK 6 1 3 0 2 1 1 0 6 2 810 Na vidminu vid koduvannya dekoduvannya zavzhdi odnoznachne Zaboroneni kombinaciyi Yaksho u DDK q3 q2 q1 q0 gt 9 to ce oznachaye sho kod mistit zaboroneni kombinaciyi ti sho dekoduyutsya u chisla bilshi za 9 tobto ne u cifru Deyaki sistemi vikoristovuyut zaboroneni kombinaciyi dlya predstavlennya znaku desyatkovoyi krapki tosho BCDBCD yakij yavlyaye soboyu 8421 DDK vidilyayetsya sered inshih dvijkovo desyatkovih kodiv kilkoma osoblivostyami Vagi rozryadiv kodu yavlyayut soboyu stepeni dvijki a otzhe koduvannya cifri zvoditsya do prostogo perevedennya u dvijkovu sistemu sho ye dosit vidomoyu operaciyeyu Odnoznachne koduvannya ne mozhe buti 2 tetrad yaki budut poznachati odnu cifru 6 zaboronenih kombinacij yih mozhna vikoristati dlya poznachennya znaku desyatkovoyi krapki eksponenti tosho Cherez ci osoblivosti a tochnishe cherez pershu danij DDK zruchno vikoristovuvati dlya zberezhennya desyatkovih chisel u komp yuterah Do perevag mozhna vidnesti elementarnist operaciyi okruglennya elementarnist mnozhennya na 10 Upakovanij ta neupakovanij formati Oskilki minimalnoyu odiniceyu danih u procesorah yak pravilo ye bajt a ne tetrada to ce prizvelo do poyavi dvoh formativ zberigannya BCD v pam yati Neupakovanij format zberigaye kodovanu cifru u molodshij tetradi bajta a starshu obnulyaye Upakovanij zapisuye molodshu cifru u molodshu tetradu a starshu u starshu tetradu Tomu u neupakovanomu formati odin bajt mozhe mistiti chisla vid 0 do 9 a v upakovanomu chisla vid 0 do 99 Neupakovanij format zruchnij dlya peretvorennya cifri u ASCII simvol i okruglennya a upakovanij dlya arifmetichnih operacij i kompaktnosti danih Procesori yaki pidtrimuyut obidva formati mozhut mistiti takozh komandi dlya perevodu z odnogo formatu v inshij BCD arifmetika Dlya procesoriv yaki nacileni na dvijkovi arifmetichni operaciyi vikonannya dvijkovo desyatkovih operacij ne ye skladnim prote stvoryuye nezruchnosti dlya programista Ce pov yazano z isnuvannyam zaboronenih kombinacij V danomu prikladi pokazano sho v deyakih vipadkah nad upakovanimi BCD chislami mozhna vikonuvati zvichajni binarni operaciyi 0001 0001 0000 0110 0001 0111 1 1 0 6 1 7 Prote yaksho suma rozryadiv viyavitsya bilshoyu za 9 to rezultat stane nekorektnim 0001 1001 0000 0110 0001 1111 1 9 0 6 1 Kombinaciya 1111 u 8421 DDK ye zaboronenoyu tomu rezultat viyavivsya nepravilnim Dlya rozv yazannya danoyi problemi potribno vikonati desyatkovu korekciyu chisla pislya vikonannya arifmetichnoyi operaciyi Sut desyatkovoyi korekciyi u tomu sho yaksho u tetradi utvorilas zaboronena kombinaciya abo vidbuvsya perenos bita z 3 u 4 rozryadi rahuyuchi vid nulovogo to do vidpovidnoyi tetradi rezultatu dodayetsya chislo 610 abo 01102 0001 1001 0000 0110 0001 1111 1 9 0 6 1 0000 0110 0010 0101 2 5 0101 1001 0111 1001 1101 0010 5 9 7 9 zaboronena komb buv perenos bita 0110 0110 1 0011 1000 3 8 Nayavnist bitu perepovnennya pislya vikonannya operaciyi oznachaye sho vidbuvsya perenos u rozryad soten Za rahunok danoyi osoblivosti u deyakih operaciyah diapazon dvijkovo desyatkovih chisel yaki koduyutsya odnim bajtom rozshirenij vid 0 do 199 U comu vipadku rezultat dorivnyuye 1 38 tobto chislo 138 PosilannyaDvijkovo desyatkovi kodi DDK 20 veresnya 2011 u Wayback Machine LiteraturaV I Yurov Assembler 2 e izd Sankt Peterburg Piter 2003 637 s ISBN 5 94723 581 1 ros Cyu stattyu treba vikifikuvati dlya vidpovidnosti standartam yakosti Vikipediyi Bud laska dopomozhit dodavannyam dorechnih vnutrishnih posilan abo vdoskonalennyam rozmitki statti Gruden 2011