Открыть сервис

Двоично-десятичная система счисления

Двоично-десятичная система счисления (англ. Binary-Coded Decimal, BCD) — это форма записи целых чисел, при которой каждая десятичная цифра числа кодируется отдельной последовательностью из четырёх двоичных разрядов (тетрадой). В отличие от обычной двоичной системы, где число представляется как единое целое в степенях двойки, BCD-представление сохраняет десятичную структуру числа, что упрощает преобразование между десятичной и двоичной формами и облегчает выполнение десятичных арифметических операций в цифровых устройствах.

Принцип кодирования

В наиболее распространённом варианте BCD (так называемая «8421»-кодировка) каждая десятичная цифра от 0 до 9 представляется четырёхбитным двоичным кодом, соответствующим её значению в двоичной системе:

Десятичная цифраДвоично-десятичный код (BCD)
00000
10001
20010
30011
40100
50101
60110
70111
81000
91001

Комбинации от 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 →