Рубрики

Серый в бинарный и бинарный в серый

Двоичные числа — это способ хранения чисел по умолчанию, но во многих приложениях двоичные числа сложны в использовании, и требуется изменение двоичных чисел. Здесь коды Грея очень полезны.
У кода Грея есть свойство, состоящее в том, что два последовательных числа отличаются только одним битом, поскольку это свойство кода Грея выполняет циклическое переключение между состояниями с минимальными усилиями и используется в K-картах, исправлении ошибок, связи и т. Д.

Как генерировать n битовых кодов серого?

Following is 2-bit sequence (n = 2)
  00 01 11 10
Following is 3-bit sequence (n = 3)
  000 001 011 010 110 111 101 100
And Following is 4-bit sequence (n = 4)
  0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 
  1110 1010 1011 1001 1000

n-битные коды Грея могут быть сгенерированы из списка (n-1) -битных кодов Грея, используя следующие шаги.

  1. Пусть список (n-1) -битных кодов Грея равен L1. Создайте другой список L2, который противоположен L1.
  2. Измените список L1, добавив префикс «0» во всех кодах L1.
  3. Измените список L2, добавив префикс «1» во всех кодах L2.
  4. Объединить L1 и L2. Связанный список является обязательным списком n-битных кодов Грея.
  5. Пожалуйста, обратитесь к генерации n-битных кодов серого для подробной программы.

    Как конвертировать бинарный в серый и наоборот?

    Binary : 0011
    Gray   : 0010
    
    Binary : 01001
    Gray   : 01101
    

    В информатике много раз нам нужно преобразовывать двоичный код в серый код и наоборот. Это преобразование может быть сделано с применением следующих правил:
    Бинарное преобразование в серый:

    1. Старший бит (MSB) серого кода всегда равен MSB данного двоичного кода.
    2. Другие биты выходного кода Грея могут быть получены с помощью бита двоичного кода XOR для этого индекса и предыдущего индекса.

    Преобразование серого в двоичное:

    1. Самый старший бит (MSB) двоичного кода всегда равен MSB данного двоичного числа.
    2. Другие биты выходного двоичного кода могут быть получены путем проверки бита серого кода по этому индексу. Если текущий бит серого кода равен 0, скопируйте предыдущий бит двоичного кода, иначе скопируйте инвертирование предыдущего бита двоичного кода.

    Ниже приведена реализация вышеуказанных шагов.

    C ++

    // C ++ программа для двоичного кода в серый
    // и преобразование серого в двоичное
    #include <iostream>

    using namespace std;

      
    // Вспомогательная функция для xor двух символов

    char xor_c(char a, char b) { return (a == b) ? '0' : '1'; }

      
    // Вспомогательная функция, чтобы перевернуть бит

    char flip(char c) { return (c == '0') ? '1' : '0'; }

      
    // функция для преобразования двоичной строки
    // в серую строку
    string binarytoGray(string binary)
    {

        string gray = "";

      

        // MSB серого кода аналогичен двоичному коду

        gray += binary[0];

      

        // Вычислить оставшиеся биты, следующий бит вычисляется

        // делаем XOR предыдущего и текущего в двоичном

        for (int i = 1; i < binary.length(); i++) {

            // Конкатенация XOR предыдущего бита

            // с текущим битом

            gray += xor_c(binary[i - 1], binary[i]);

        }

      

        return gray;

    }

      
    // функция для преобразования серой строки кода
    // в двоичную строку
    string graytoBinary(string gray)
    {

        string binary = "";

      

        // MSB двоичного кода такой же, как серый код

        binary += gray[0];

      

        // Вычислить оставшиеся биты

        for (int i = 1; i < gray.length(); i++) {

            // Если текущий бит равен 0, объединить

            // предыдущий бит

            if (gray[i] == '0')

                binary += binary[i - 1];

      

            // Иначе, объединить инвертировать

            // предыдущий бит

            else

                binary += flip(binary[i - 1]);

        }

      

        return binary;

    }

      
    // Программа драйвера для проверки вышеуказанных функций

    int main()

    {

        string binary = "01001";

        cout << "Gray code of " << binary << " is "

             << binarytoGray(binary) << endl;

      

        string gray = "01101";

        cout << "Binary code of " << gray << " is "

             << graytoBinary(gray) << endl;

        return 0;

    }

    Джава

    // Java-программа для Binary To Grey
    // и преобразование серого в двоичное

    import java.io.*;

    class code_conversion {

        // Вспомогательная функция для xor

        // два символа

        char xor_c(char a, char b)

        {

            return (a == b) ? '0' : '1';

        }

      

        // Вспомогательная функция, чтобы перевернуть бит

        char flip(char c)

        {

            return (c == '0') ? '1' : '0';

        }

      

        // функция для преобразования двоичного

        // строка в серую строку

        String binarytoGray(String binary)

        {

            String gray = "";

      

            // MSB серого кода такой же

            // как двоичный код

            gray += binary.charAt(0);

      

            // Вычисляем оставшиеся биты, следующий бит

            // вычисляется с помощью XOR предыдущего

            // и текущий в двоичном

            for (int i = 1; i < binary.length(); i++) {

                // Конкатенация XOR предыдущего бита

                // с текущим битом

                gray += xor_c(binary.charAt(i - 1),

                              binary.charAt(i));

            }

      

            return gray;

        }

        // функция для преобразования серого кода

        // строка в двоичную строку

        String graytoBinary(String gray)

        {

            String binary = "";

      

            // MSB двоичного кода такой же

            // как серый код

            binary += gray.charAt(0);

      

            // Вычислить оставшиеся биты

            for (int i = 1; i < gray.length(); i++) {

                // Если текущий бит равен 0,

                // объединяем предыдущий бит

                if (gray.charAt(i) == '0')

                    binary += binary.charAt(i - 1);

      

                // Иначе, объединить инвертировать

                // предыдущий бит

                else

                    binary += flip(binary.charAt(i - 1));

            }

      

            return binary;

        }

      

        // Программа драйвера для проверки вышеуказанных функций

        public static void main(String args[])

            throws IOException

        {

            code_conversion ob = new code_conversion();

            String binary = "01001";

            System.out.println("Gray code of " + binary + " is " + ob.binarytoGray(binary));

      

            String gray = "01101";

            System.out.println("Binary code of " + gray + " is " + ob.graytoBinary(gray));

        }

    }

      
    // Этот код предоставлен Аншикой Гоял.

    python3

    # Программа Python3 для Binary To Grey
    # и серый в двоичное преобразование

      
    # Вспомогательная функция для xor двух символов

    def xor_c(a, b):

        return '0' if(a == b) else '1';

      
    # Вспомогательная функция, чтобы перевернуть бит

    def flip(c):

        return '1' if(c == '0') else '0';

      
    # функция для преобразования двоичной строки
    # до серой строки

    def binarytoGray(binary):

        gray = "";

      

        # MSB серого кода такой же, как

        # бинарный код

        gray += binary[0];

      

        # Вычислить оставшиеся биты, следующий бит

        # вычисляется с помощью XOR предыдущего

        # и текущий в двоичном

        for i in range(1,len(binary)):

              

            # Конкатенация XOR предыдущего

            # бит с текущим битом

            gray += xor_c(binary[i - 1], 

                          binary[i]);

      

        return gray;

      
    # функция для преобразования серого кода
    # строка в двоичную строку

    def graytoBinary(gray):

      

        binary = "";

      

        # MSB двоичного кода такой же

        # как серый код

        binary += gray[0];

      

        # Вычислить оставшиеся биты

        for i in range(1, len(gray)):

              

            # Если текущий бит равен 0,

            # объединить предыдущий бит

            if (gray[i] == '0'):

                binary += binary[i - 1];

      

            # Остальное, конкатенация инвертировать

            № предыдущего бита

            else:

                binary += flip(binary[i - 1]);

      

        return binary;

      
    Код водителя

    binary = "01001";

    print("Gray code of", binary, "is"

                 binarytoGray(binary));

      

    gray = "01101";

    print("Binary code of", gray, "is"

                   graytoBinary(gray));

          
    # Этот код предоставлен mits

    C #

    // C # программа для двоичного в серый
    // и преобразование Грея в двоичное.

    using System;

      

    class GFG {

          

        // Вспомогательная функция для xor

        // два символа

        static char xor_c(char a, char b)

        {

            return (a == b) ? '0' : '1';

        }

      

        // Вспомогательная функция, чтобы перевернуть бит

        static char flip(char c)

        {

            return (c == '0') ? '1' : '0';

        }

      

        // функция для преобразования двоичного

        // строка в серую строку

        static String binarytoGray(String binary)

        {

            String gray = "";

      

            // MSB серого кода такой же

            // как двоичный код

            gray += binary[0];

      

            // Вычисляем оставшиеся биты, далее

            // бит вычисляется с помощью XOR

            // предыдущего и текущего в

            // Бинарный

            for (int i = 1; i < binary.Length; i++)

            {

                  

                // Конкатенация XOR предыдущего

                // бит с текущим битом

                gray += xor_c(binary[i - 1],

                                       binary[i]);

            }

      

            return gray;

        }

          

        // функция для преобразования серого кода

        // строка в двоичную строку

        static String graytoBinary(String gray)

        {

              

            String binary = "";

      

            // MSB двоичного кода такой же

            // как серый код

            binary += gray[0];

      

            // Вычислить оставшиеся биты

            for (int i = 1; i < gray.Length; i++)

            {

                  

                // Если текущий бит равен 0,

                // объединяем предыдущий бит

                if (gray[i] == '0')

                    binary += binary[i - 1];

      

                // Иначе, объединить инвертировать

                // предыдущий бит

                else

                    binary += flip(binary[i - 1]);

            }

      

            return binary;

        }

      

        // Программа драйвера для тестирования выше

        // функции

        public static void Main()

      

        {

            String binary = "01001";

            Console.WriteLine("Gray code of "

                            + binary + " is "

                     + binarytoGray(binary));

      

            String gray = "01101";

            Console.Write("Binary code of "

                            + gray + " is "

                     + graytoBinary(gray));

        }

    }

      
    // Этот код предоставлен нитин митталь.

    PHP

    <?php
    // PHP программа для двоичного в серый
    // и преобразование серого в двоичное

      
    // Вспомогательная функция для xor двух символов

    function xor_c($a, $b

        return ($a == $b) ? '0' : '1'

    }

      
    // Вспомогательная функция, чтобы перевернуть бит

    function flip($c

        return ($c == '0') ? '1' : '0'

    }

      
    // функция для преобразования двоичной строки
    // в серую строку

    function binarytoGray($binary)

    {

        $gray = "";

      

        // MSB серого кода такой же, как

        // бинарный код

        $gray .= $binary[0];

      

        // Вычисляем оставшиеся биты, следующий бит

        // вычисляется с помощью XOR предыдущего

        // и текущий в двоичном

        for ($i = 1; $i < strlen($binary); $i++)

        {

            // Конкатенация XOR предыдущего бита

            // с текущим битом

            $gray .= xor_c($binary[$i - 1], $binary[$i]);

        }

      

        return $gray;

    }

      
    // функция для преобразования серой строки кода
    // в двоичную строку

    function graytoBinary($gray)

    {

        $binary = "";

      

        // MSB двоичного кода такой же, как серый код

        $binary .= $gray[0];

      

        // Вычислить оставшиеся биты

        for ($i = 1; $i < strlen($gray); $i++) 

        {

            // Если текущий бит равен 0, объединить

            // предыдущий бит

            if ($gray[$i] == '0')

                $binary .= $binary[$i - 1];

      

            // Иначе, объединить инвертировать

            // предыдущий бит

            else

                $binary .= flip($binary[$i - 1]);

        }

      

        return $binary;

    }

      
    // Код драйвера

    $binary = "01001";

    print("Gray code of " . $binary . " is " .

                binarytoGray($binary) . "\n");

      

    $gray = "01101";

    print("Binary code of " . $gray . " is " .

                         graytoBinary($gray));

          
    // Этот код предоставлен mits
    ?>


    Выход:

    Gray code of 01001 is 01101
    Binary code of 01101 is 01001

    Эта статья предоставлена Уткаршем Триведи. Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

    Рекомендуемые посты:

    Серый в бинарный и бинарный в серый

    0.00 (0%) 0 votes