freelion
@freelion
{}

Как сравнить два числа в коде Грея?

Например у нас есть два числа X и Y закодированных в коде Грея. Каким образом мы можем эффективно их сравнить?

Например:
X(10) = 12 X(2) = 1100 X(Grey) = 1010
Y(10) = 15 Y(2) = 1111 Y(Grey) = 1000
  • Вопрос задан
  • 278 просмотров
Решения вопроса 1
freelion
@freelion Автор вопроса
{}
Чтобы сравнить два числа грея без перевода в бинарную систему мы используем его рефлективность. Числа будем сравнивать побитово. Если у нас первый бит у X равен 0 а у Y равен 1, то Y больше X. Если у нас два числа начинаются одинаково, то все равно смотрим на первый бит. Допустим он у нас 0 в таком случае сравниваем два следующих бита как обычно (т.е. 1 больше 0). Если же у нас первый бит 1, то нужно сделать инвертирование сравнения следующего 2-го бита (т.е. 0 больше 1)

Например имеем числа 4 (десятичное) и 6 (десятичное), после перевода их в числа Грея будем иметь соотвественно 110 и 101. Как мы видим первый бит 1 значит следующий надо сравнить инвертируя логику (101 больше чем 110). Если единица в качестве первого бита будет два раза подряд то инвертируем два раза. Возьмем числа 8 и 9 и представим в виде кода Грея 1100 и 1101. 1й бит одинаковый и единица - инвертируем логику сравнивания, 2й бит снова единица снова инвертируем обратно, 3й бит одинаковый это 0 то ничего не инвертируем и сравниваем нормально последний 4й бит. В 9ке он равен единице а в 8ке нулю. То есть (1100 меньше чем 1101)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Смысл младших битов кода Грея зависит от значения старших битов, поэтому вряд ли можно избежать перевода значения из кода Грея в обычный двоичный. Если битность кода фиксированная и небольшая, скорее всего оптимальный вариант -- перевести в двоичный код и сравнить. Если битность большая или переменная, то можно переводить и одновременно сравнивать уже переведённые биты и останавливаться на первом неравенстве. См.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы