> Грей | отражённый | двоичный <
// Код Грея — двоичная система счисления, в которой соседние значения отличаются только одним битом
Единичное расстояние
Между соседними значениями изменяется только один бит.
Снижение ошибок
Уменьшает ошибки при аналого‑цифровом преобразовании.
Циклическое свойство
Первое и последнее значение также отличаются лишь одним битом.
>> техническая информация
Как работает код Грея:
Код Грея (отражённый двоичный код) — это система двоичного кодирования, в которой два соседних значения отличаются только одним битом. Он формируется с помощью операции XOR между каждым разрядом и предыдущим. Такая структура делает его удобным для датчиков положения и уменьшения ошибок в цифровых устройствах.
Примеры кода Грея:
Десятичное | Бинарное | Код Грея 0 | 0000 | 0000 1 | 0001 | 0001 2 | 0010 | 0011 3 | 0011 | 0010 4 | 0100 | 0110 5 | 0101 | 0111 6 | 0110 | 0101 7 | 0111 | 0100 Примечание: между соседними кодами Грея изменяется только 1 бит
Зачем использовать код Грея:
- ▸Роторные энкодеры
- ▸Карты Карно (Karnaugh maps)
- ▸Коррекция ошибок
- ▸Цифровая связь
- ▸Датчики положения
>> часто задаваемые вопросы
Что такое код Грея?
Код Грея, или отражённый двоичный код, — это способ кодирования чисел, при котором два последовательных значения отличаются друг от друга лишь одним битом. Он широко применяется в цифровой технике, чтобы избежать ошибочных показаний во время переключений.
Как перевести двоичный код в код Грея?
Чтобы получить код Грея из двоичного числа: 1) оставьте старший бит (MSB) без изменений, 2) для каждого следующего бита выполните операцию XOR с предыдущим. Формула: G[i] = B[i] XOR B[i-1]. Например, двоичное 1011 переходит в код Грея 1110.
Почему код Грея лучше подходит для энкодеров?
В обычном двоичном коде при переходе между значениями может изменяться сразу несколько бит, что приводит к появлению ложных промежуточных состояний. Код Грея гарантирует изменение только одного бита за шаг, поэтому показания с энкодеров становятся более надёжными.
Где используется код Грея?
Код Грея применяется в роторных энкодерах, при упрощении логических функций с помощью карт Карно, в схемах коррекции ошибок в цифровой связи, в генетических алгоритмах и в аналого‑цифровых преобразователях.
// Краткий справочник
| Dec | Binary | Gray |
|---|---|---|
| 0 | 000 | 000 |
| 1 | 001 | 001 |
| 2 | 010 | 011 |
| 3 | 011 | 010 |
| 4 | 100 | 110 |
| 5 | 101 | 111 |
| 6 | 110 | 101 |
| 7 | 111 | 100 |
// Примеры кода
Binary -> Gray g = b ^ (b >> 1)
Gray -> Binary b = g; for (m = g >> 1; m; m >>= 1) b ^= m;
Python def to_gray(n): return n ^ (n >> 1)
def from_gray(g):
n = 0
while g: n ^= g; g >>= 1
return n
n bits 2^n codes, successive codes differ by exactly 1 bit (also 2^n - 1 -> 0)
>> Другие вопросы
В: Что такое код Грея?
О: Код Грея (отражённый двоичный код) — представление чисел, при котором соседние значения отличаются ровно одним битом. Запатентован Фрэнком Греем в Bell Labs и цикличен: последнее значение тоже отличается от первого одним битом.
В: Почему его используют в энкодерах?
О: В обычном двоичном коде при переходе, например, 011 → 100 меняются сразу несколько битов. Если датчики срабатывают не идеально синхронно, на миг возникают ложные значения. В коде Грея меняется один бит, и ошибка не больше одной позиции.
В: Как перевести код Грея в двоичный?
О: Старший бит остаётся, каждый следующий двоичный бит равен предыдущему двоичному биту XOR текущему биту Грея. Формулой: b = g ^ (g >> 1) ^ (g >> 2) ^ …. Из двоичного в Грея: g = b ^ (b >> 1).