BCD и код Грея
Специализированные двоичные кодировки
Изучить специализированные кодыНе все двоичные представления являются чистыми системами с основанием 2. BCD (двоично-десятичный код) и код Грея — это специализированные кодировки, решающие конкретные задачи в цифровых системах: от отображения чисел на калькуляторах до считывания данных с поворотных энкодеров без ошибок.
Двоично-десятичный код (BCD)
Что такое BCD?
BCD представляет каждую десятичную цифру в виде 4-битного двоичного числа:
| Десятичное | BCD | Чистое двоичное |
|---|---|---|
| 0 | 0000 | 0000 |
| 5 | 0101 | 0101 |
| 9 | 1001 | 1001 |
| 10 | 0001 0000 | 1010 |
| 42 | 0100 0010 | 101010 |
| 99 | 1001 1001 | 1100011 |
Ключевое отличие
BCD использует 4 бита на каждую десятичную цифру; чистое двоичное представление компактнее, но сложнее для отображения.
Зачем использовать BCD?
Простое десятичное отображение
- Каждая группа из 4 бит → одна цифра на семисегментном индикаторе
- Не требуется сложное преобразование из двоичного в десятичное
- Используется в калькуляторах и измерительных приборах
Точные десятичные значения
- Финансовые расчёты требуют точного десятичного представления
- 0,10 точно представляется в BCD, но приблизительно в двоичной плавающей точке
- Позволяет избежать ошибок округления при работе с валютами
Удобное для чтения хранение
- Временные метки часто хранятся в BCD
- Легко читаются в шестнадцатеричных дампах
- Часы реального времени BIOS используют BCD
Арифметика BCD
Проблема сложения
При сложении в BCD требуется коррекция, если результат > 9:
- 0101 + 0100 = 1001 (5 + 4 = 9) ✓ Допустимый BCD
- 0111 + 0101 = 1100 (7 + 5 = 12) ✗ Недопустимый BCD
- Необходимо прибавить 6 (0110) для коррекции: 1100 + 0110 = 0001 0010 = 12
Почему прибавляют 6?
BCD использует только значения 0000–1001 (0–9). Значения 1010–1111 (10–15) недопустимы. Прибавление 6 вызывает перенос в следующий разряд.
Разновидности BCD
Упакованный BCD
- Две цифры в одном байте
- Более эффективное хранение
- Пример: 42 = 0100 0010 в одном байте
Неупакованный BCD
- Одна цифра на байт (старшие 4 бита не используются / равны нулю)
- Более простая обработка
- Пример: 42 = 00000100 00000010 (два байта)
BCD с избытком 3 (Excess-3)
- К каждой цифре прибавляется 3 перед кодированием
- Упрощает некоторые арифметические схемы
- 0 = 0011, 9 = 1100
Код Грея
Что такое код Грея?
Код Грея — это двоичная последовательность, в которой между соседними значениями изменяется только один бит:
| Десятичное | Двоичное | Код Грея |
|---|---|---|
| 0 | 0000 | 0000 |
| 1 | 0001 | 0001 |
| 2 | 0010 | 0011 |
| 3 | 0011 | 0010 |
| 4 | 0100 | 0110 |
| 5 | 0101 | 0111 |
| 6 | 0110 | 0101 |
| 7 | 0111 | 0100 |
Почему код Грея важен
Проблема, которую решает код Грея
В обычном двоичном коде при переходе от 7 (0111) к 8 (1000) изменяются 4 бита одновременно.
- Если датчики не переключаются в точности одновременно
- Возникают кратковременные ложные показания
- Могут кратковременно считываться значения 0000, 0001, 0011, 0111 или 1111
Решение с помощью кода Грея
- За один раз изменяется только один бит
- Нет неоднозначных промежуточных состояний
- Незаменим для энкодеров положения
Применения кода Грея
Поворотные энкодеры
- Определение положения двигателя
- Регуляторы громкости (цифровые)
- Углы поворота в робототехнике
- Позиционирование станков с ЧПУ
Минимизация ошибок
- Аналого-цифровое преобразование
- Генетические алгоритмы (кроссинговер)
- Карты Карно (минимизация логических функций)
Связь
- Некоторые коды с исправлением ошибок
- Определённые схемы модуляции
Преобразование двоичного кода в код Грея
Метод
- Старший бит (MSB) остаётся без изменений
- Каждый последующий бит получается операцией XOR с битом слева
Пример: Преобразование 1011 (двоичное) в код Грея
- MSB: 1 (без изменений)
- 1 XOR 0 = 1
- 0 XOR 1 = 1
- 1 XOR 1 = 0
- Результат: 1110 (код Грея)
Формула
Gray[i] = Binary[i] XOR Binary[i+1]
Gray[MSB] = Binary[MSB]
Преобразование кода Грея в двоичный
Метод
- Старший бит (MSB) остаётся без изменений
- Каждый бит Грея подвергается операции XOR с предыдущим двоичным битом
Пример: Преобразование 1110 (код Грея) в двоичное
- MSB: 1 (без изменений)
- 1 XOR 1 = 0
- 0 XOR 1 = 1
- 1 XOR 0 = 1
- Результат: 1011 (двоичное)
Заключение
BCD и код Грея — это специализированные двоичные кодировки, решающие конкретные задачи. BCD упрощает десятичное отображение и обеспечивает точную десятичную арифметику, что важно для калькуляторов и финансовых систем. Код Грея гарантирует, что между соседними значениями изменяется только один бит, что незаменимо для энкодеров положения и предотвращения ошибок. Хотя ни один из них не распространён так, как чистое двоичное представление, их понимание показывает, как различные числовые представления служат различным инженерным задачам.