Двоично-десятичная система счисления
Двоично-десятичная система счисления (англ. Binary-Coded Decimal, BCD) — это форма записи целых чисел, при которой каждая десятичная цифра числа кодируется отдельной последовательностью из четырёх двоичных разрядов (тетрадой). В отличие от обычной двоичной системы, где число представляется как единое целое в степенях двойки, BCD-представление сохраняет десятичную структуру числа, что упрощает преобразование между десятичной и двоичной формами и облегчает выполнение десятичных арифметических операций в цифровых устройствах.
Принцип кодирования
В наиболее распространённом варианте BCD (так называемая «8421»-кодировка) каждая десятичная цифра от 0 до 9 представляется четырёхбитным двоичным кодом, соответствующим её значению в двоичной системе:
| Десятичная цифра | Двоично-десятичный код (BCD) |
|---|---|
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
| 6 | 0110 |
| 7 | 0111 |
| 8 | 1000 |
| 9 | 1001 |
Комбинации от 1010 до 1111 (десятичные 10–15) в стандартном BCD не используются и считаются недопустимыми. Например, число 25 в BCD записывается как 0010 0101, где первая тетрада (0010) соответствует цифре 2, а вторая (0101) — цифре 5.
История
Идея двоично-десятичного кодирования возникла в середине XX века в связи с развитием электронных вычислительных машин. Первые коммерческие компьютеры, такие как UNIVAC I (1951) и IBM 702 (1953), использовали BCD для обработки десятичных данных, поскольку большинство коммерческих и финансовых расчётов требовали точного десятичного представления, а не приближённого двоичного. В 1950-х годах BCD стал стандартом для многих мейнфреймов, особенно в системах, предназначенных для бухгалтерского учёта и банковских операций. В 1960-х годах компания IBM внедрила BCD в архитектуру System/360, где он использовался для десятичной арифметики наряду с двоичной. С распространением микропроцессоров в 1970-х годах BCD применялся в калькуляторах, кассовых аппаратах и других устройствах, где требовалась высокая точность десятичных вычислений.
Разновидности BCD
Существует несколько вариантов двоично-десятичного кодирования, различающихся весовыми коэффициентами разрядов в тетраде:
- Код 8421 (наиболее распространённый) — веса разрядов: 8, 4, 2, 1. Соответствует стандартному двоичному представлению цифр.
- Код 2421 — веса разрядов: 2, 4, 2, 1. Обладает свойством самодополняемости до 9 (инверсия битов даёт код цифры, дополняющей исходную до 9).
- Код 5211 — веса разрядов: 5, 2, 1, 1. Используется в некоторых измерительных приборах.
- Код «с избытком 3» (XS-3) — каждая десятичная цифра кодируется двоичным значением, увеличенным на 3. Например, 0 кодируется как 0011, 1 — 0100, 9 — 1100. Этот код также самодополняем и упрощает выполнение десятичного сложения.
- Код Грея для BCD — вариант, в котором соседние цифры различаются только одним битом, что снижает вероятность ошибок при считывании.
Применение
Вычислительная техника
BCD широко использовался в ранних компьютерах и продолжает применяться в специализированных областях, где важна точность десятичных вычислений. Например, в финансовых системах (банковские транзакции, расчёт процентов) ошибки округления, возникающие при переводе двоичных чисел в десятичные, недопустимы. BCD-арифметика реализована в некоторых процессорах (например, в архитектуре x86 есть инструкции DAA, DAS, AAA, AAS для коррекции BCD-результатов). В микроконтроллерах и встраиваемых системах BCD используется для отображения времени (часы реального времени) и управления семисегментными индикаторами.
Калькуляторы и измерительные приборы
Большинство электронных калькуляторов, особенно ранних моделей, работали с числами в BCD-формате, так как это упрощало преобразование между внутренним представлением и десятичным дисплеем. Цифровые вольтметры, мультиметры и другие измерительные устройства часто выводят показания в BCD-коде для непосредственной передачи на индикаторы или в регистры.
Связь и телекоммуникации
В некоторых протоколах передачи данных (например, в DTMF-сигнализации) цифры кодируются в BCD-подобном формате. В телефонных сетях BCD используется для передачи номера вызываемого абонента.
Преимущества и недостатки
Преимущества
- Точность десятичных вычислений: отсутствие ошибок округления, характерных для двоичной арифметики с плавающей запятой.
- Простота преобразования: перевод между десятичным и BCD-представлением тривиален (каждая цифра заменяется своей тетрадой).
- Удобство отображения: BCD-числа легко выводятся на семисегментные индикаторы без дополнительного декодирования.
- Совместимость с десятичными протоколами: многие финансовые и телекоммуникационные стандарты основаны на десятичных данных.
Недостатки
- Избыточность: для хранения BCD-числа требуется больше битов, чем для эквивалентного двоичного числа. Например, число 99 (двоичное 1100011, 7 бит) в BCD занимает 8 бит (1001 1001). Для чисел с большим количеством разрядов избыточность растёт.
- Медленная арифметика: выполнение операций сложения и вычитания в BCD требует дополнительной коррекции (например, при сложении двух тетрад, дающих сумму >9, необходимо прибавлять 6 и переносить единицу в следующую тетраду). Это замедляет вычисления по сравнению с чисто двоичной арифметикой.
- Ограниченный диапазон: BCD-представление неэффективно для хранения очень больших чисел, так как каждый десятичный разряд требует 4 бита, тогда как в двоичной системе на тот же диапазон чисел требуется меньше битов.
Интересные факты
- В процессорах Intel x86 до сих пор поддерживаются инструкции для работы с BCD-числами, хотя в современных системах они используются редко. В 64-битном режиме эти инструкции были удалены.
- В некоторых языках программирования (например, COBOL, PL/I) десятичные числа по умолчанию хранятся в BCD-формате, что связано с их историческим применением в коммерческих вычислениях.
- В СССР двоично-десятичная система использовалась в серийных ЭВМ «Минск-32» и «ЕС ЭВМ» для обработки экономических данных.
- Формат BCD применяется в стандарте IEEE 754-2008 для десятичной арифметики с плавающей запятой (Decimal32, Decimal64, Decimal128), где числа кодируются в BCD-подобном виде с использованием DPD-сжатия (Densely Packed Decimal).
Источники
- Таненбаум Э. Архитектура компьютера. — 6-е изд. — СПб.: Питер, 2013. — 816 с.
- Корнеев В. В., Киселёв А. В. Современные микропроцессоры. — М.: Нолидж, 2000. — 320 с.
- Хоровиц П., Хилл У. Искусство схемотехники. — 7-е изд. — М.: Мир, 2003. — 704 с.
- IEEE Standard for Floating-Point Arithmetic (IEEE 754-2008). — IEEE, 2008. — 70 с.
- Бурцев В. С. Электронные вычислительные машины. — М.: Наука, 1974. — 480 с.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →