BCD
BCD — это цифровой код, в котором каждая десятичная цифра числа представляется в виде четырёхбитного двоичного числа (тетрады). BCD (от англ. Binary-Coded Decimal, двоично-десятичный код) является формой записи чисел, при которой десятичная система счисления сохраняется, но каждая её цифра кодируется отдельно двоичным кодом. Этот способ отличается от стандартного двоичного представления числа, где всё число преобразуется в двоичную систему целиком. BCD широко применяется в вычислительной технике и электронике для упрощения ввода, вывода и обработки десятичных данных, особенно в калькуляторах, часах и измерительных приборах.
История
Идея кодирования десятичных цифр двоичными комбинациями возникла на заре развития вычислительной техники. Первые электромеханические и ранние электронные компьютеры, такие как ENIAC (1946), использовали десятичную арифметику, где каждая цифра хранилась в виде группы из десяти триггеров (один из десяти). Однако такой подход был громоздким. С появлением транзисторов и интегральных схем более эффективным оказалось представление каждой цифры четырьмя битами. В 1950-х годах BCD-кодирование стало стандартом для многих коммерческих компьютеров, например, IBM 650 (1953) и IBM 1401 (1959). В 1960-х годах BCD активно применялся в калькуляторах и терминалах, так как упрощал преобразование между десятичным вводом и внутренним представлением. С развитием микропроцессоров BCD-арифметика была включена в наборы команд многих процессоров (например, x86 содержит инструкции DAA, DAS для коррекции BCD-сложения), хотя в современных универсальных вычислениях она уступила место чистому двоичному представлению из-за более эффективного использования памяти и скорости.
Принцип кодирования
В наиболее распространённом варианте BCD (8421-BCD) каждая десятичная цифра от 0 до 9 кодируется четырьмя битами, соответствующими её двоичному представлению:
| Десятичная цифра | BCD-код (8421) |
|---|---|
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
| 6 | 0110 |
| 7 | 0111 |
| 8 | 1000 |
| 9 | 1001 |
Комбинации 1010 (10), 1011 (11), 1100 (12), 1101 (13), 1110 (14) и 1111 (15) в стандартном BCD не используются и считаются недопустимыми (псевдотетрадами). При выполнении арифметических операций с BCD-числами требуется коррекция результата, если сумма двух тетрад превышает 9 (1001), так как перенос должен происходить не на 16, а на 10.
Например, десятичное число 427 в BCD будет записано как 0100 0010 0111. Каждая группа из четырёх битов представляет одну цифру: 4, 2 и 7 соответственно.
Виды BCD-кодов
Существует несколько разновидностей BCD-кодов, различающихся весом разрядов и способом кодирования:
Код 8421 (наиболее распространённый)
Вес разрядов: 8, 4, 2, 1. Соответствует прямому двоичному представлению цифры. Используется в большинстве цифровых устройств.
Код 2421 (код Айкена)
Вес разрядов: 2, 4, 2, 1. Обладает свойством самодополняемости: инвертирование всех битов кода даёт код для цифры, дополняющей исходную до 9. Например, код 3 (0011) при инверсии даёт 1100, что соответствует 6 (9-3=6). Это упрощает реализацию вычитания.
Код с избытком 3 (XS-3, Excess-3)
Каждая цифра кодируется как двоичное представление (цифра + 3). Например, 0 кодируется как 0011 (0+3), 1 — 0100 (1+3), 9 — 1100 (9+3). Также является самодополняющимся. Упрощает сложение и вычитание, так как переносы возникают при сумме, большей 9.
Код «2 из 5»
Каждая цифра кодируется пятью битами, из которых ровно два равны 1. Этот код обладает свойством обнаружения одиночных ошибок (изменение одного бита нарушает условие «ровно два единичных бита»). Использовался в ранних компьютерных системах и некоторых телетайпах.
Применение
BCD-кодирование находит применение в областях, где важна точность десятичного представления и удобство отображения:
Калькуляторы и финансовые вычисления
В карманных и бухгалтерских калькуляторах BCD позволяет избежать ошибок округления, характерных для двоичной арифметики с плавающей запятой. Например, число 0,1 в двоичной системе не может быть представлено точно, тогда как в BCD оно записывается как 0,0001 (0,1). Это критично для финансовых расчётов, где требуется точное соответствие десятичным дробям.
Цифровые часы и таймеры
Семисегментные индикаторы, отображающие время, часто управляются BCD-счётчиками. Каждая цифра часов, минут и секунд хранится и обрабатывается отдельно, что упрощает декодирование для индикации.
Промышленная электроника и измерительные приборы
Мультиметры, частотомеры, датчики температуры и другие устройства с цифровым дисплеем используют BCD для передачи данных на индикаторы или в контроллеры. BCD-выходы часто используются в энкодерах и переключателях.
Микроконтроллеры и встроенные системы
Некоторые микроконтроллеры (например, семейство PIC, AVR) имеют аппаратную поддержку BCD-арифметики или библиотеки для работы с BCD. Это позволяет эффективно обрабатывать десятичные данные без преобразования в двоичную систему.
Протоколы передачи данных
В некоторых промышленных протоколах (например, Modbus) данные могут передаваться в формате BCD для совместимости с устаревшими устройствами или упрощения отладки.
Преимущества и недостатки
Преимущества
- Точность десятичного представления: BCD точно представляет десятичные дроби, что исключает ошибки округления при финансовых и метрологических расчётах.
- Простота преобразования в десятичный вид: Для отображения на дисплее или печати не требуется сложных алгоритмов перевода из двоичной системы.
- Удобство при работе с цифровыми индикаторами: Каждая цифра обрабатывается независимо, что упрощает схемотехнику.
Недостатки
- Неэффективное использование памяти: Для хранения каждой десятичной цифры требуется 4 бита, хотя теоретически можно хранить 16 значений. В результате BCD-числа занимают больше памяти, чем их двоичные эквиваленты (например, число 99 в BCD занимает 8 бит, а в двоичном — 7 бит; число 999 — 12 бит против 10 бит).
- Снижение скорости вычислений: Арифметические операции с BCD-числами требуют дополнительных шагов коррекции, что замедляет выполнение программного кода по сравнению с чисто двоичной арифметикой.
- Ограниченный диапазон: При одинаковом количестве бит BCD-числа могут представлять меньший диапазон значений, чем двоичные.
Интересные факты
- В языке ассемблера x86 существуют специальные инструкции для коррекции BCD-сложения (DAA — Decimal Adjust after Addition) и вычитания (DAS — Decimal Adjust after Subtraction), которые позволяют работать с упакованными BCD-числами (по две цифры в байте).
- В ранних персональных компьютерах, таких как IBM PC/XT, BCD-арифметика использовалась в интерпретаторах BASIC для работы с десятичными числами.
- Некоторые процессоры (например, Motorola 68000) не имели аппаратной поддержки BCD, что требовало программной реализации.
- В СССР BCD-код широко применялся в бытовой электронике, например, в электронных часах «Электроника 7» и калькуляторах серии «МК».
- В современных высокопроизводительных вычислениях BCD практически не используется, однако он остаётся стандартом в специализированных микроконтроллерах для банковских терминалов, кассовых аппаратов и торговых автоматов.
Источники
- Таненбаум Э. Архитектура компьютера. — 6-е изд. — СПб.: Питер, 2013. — С. 123-126.
- Хоровиц П., Хилл У. Искусство схемотехники. — 7-е изд. — М.: Мир, 2003. — С. 478-482.
- ГОСТ 27459-87 «Системы обработки информации. Машинная графика. Термины и определения» (раздел, касающийся кодирования данных).
- Документация Intel 64 and IA-32 Architectures Software Developer’s Manual, Volume 2A: Instruction Set Reference, A-L. — Intel Corporation, 2020. — Описание инструкций DAA и DAS.
- Угрюмов Е. П. Цифровая схемотехника. — 3-е изд. — СПб.: БХВ-Петербург, 2010. — С. 215-220.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →