Implementación de código gris en varios idiomas

Mi idea general:
1. Obtenga una matriz de n-1 bits para generar códigos Gray.
2. Dado que el número de códigos Gray generados por n bits es el doble que n-1, siempre que n sea la primera mitad del Gray código, agregue 0, y luego simplemente agregue 1 a la mitad.
El siguiente es el método de implementación de cada blogger:
Lenguaje C reimpreso a partir de la adición de la descripción del enlace
Generación de código gris

Sólo un bit es diferente entre los códigos Gray adyacentes, esto es para evitar el efecto de retardo causado por cambios simultáneos de múltiples bits durante la conversión. La definición específica es la siguiente.

En la codificación de un grupo de números, si dos códigos adyacentes difieren solo en un número binario, este tipo de codificación se denomina Código gris. Además, debido a que solo hay un dígito entre el número más grande y el número más pequeño Diferente, eso es "conectado de extremo a extremo", por lo que también se le llama código cíclico o código de reflexión. En los sistemas digitales, a menudo se requiere que los códigos cambien en un cierto orden. Por ejemplo, si usa un número natural para contar hacia arriba, si se usa el código 8421, los cuatro dígitos cambiarán cuando el número 0111 cambie a 1000. En el circuito real, el cambio de 4 dígitos no puede ocurrir absolutamente al mismo tiempo. , y pueden aparecer otros códigos a corto plazo en el recuento (1100, 1111, etc.). En determinadas circunstancias, puede provocar un error de estado del circuito o un error de entrada. El uso de código Gray puede evitar este tipo de error. Hay muchas formas de codificación de código Gray.

Método de diseño: El
  primer paso: se generan dos cadenas de 0 y 1.
  Paso 2: Sobre la base del primer paso, agregue 0 y 1 a cada cadena, pero solo puede agregar una a la vez, por lo que debe hacerlo dos veces. Esto se convierte en 00,01,11,10 (observe la simetría).
  El tercer paso: sobre la base del segundo paso, agregue 0 y 1. De manera similar, solo puede agregar uno a la vez, de modo que se convierta en 000,001,011,010,110,111,101,100.
  Bien, entonces se genera el código Gray de 3 bits.
  Si desea generar un código Gray de 4 bits, solo necesitamos agregar una capa de 0,1 al código Gray de 3 bits: 0000,0001,0011,0010,0110,0111,0101,0100,1100,1101 , 1110, 1010, 0111, 1001, 1000.
  Es decir, el código Gray de n bits se genera basándose en el código Gray de n-1 bit.
  El siguiente es el código que usa la recursividad para generar un código Gray de n bits.

#include <stdio.h>
#include <string.h>

#define MAX_LEN 256

char GrayCode [MAX_LEN] [MAX_LEN];

// 2 ^ n
int pow (int m)
{ int i, sum = 2; if (1 == m) { return 2; } para (i = 1; i <m; i ++) { suma * = 2; } return sum; }










char ** GrayCodeCreate (int n)
{ int i, j;

if(1 > n)
{
    printf("Wrong!\n");
    return **GrayCode;
}
else if(1 == n)
{
    //printf("%d ", strlen(GrayCode[0]));
    GrayCode[0][0] = '0';
    GrayCode[1][0] = '1';
    //printf("%d ", strlen(GrayCode[0]));
    return **GrayCode;
}

GrayCodeCreate(n - 1);

for(i = pow(n) / 2 - 1, j = pow(n) / 2; i >= 0, j < pow(n); i--, j++)
{
    strcpy(GrayCode[j], GrayCode[i]);
}
for(i = 0, j = pow(n) / 2; i < pow(n) / 2, j < pow(n); i++, j++)
{
    GrayCode[i][strlen(GrayCode[i])] = '0';
    GrayCode[j][strlen(GrayCode[j])] = '1';
}
return **GrayCode;

}

int main ()
{ int i, j, n; scanf ("% d", & n); // printf ("% d", pow (n)); GrayCodeCreate (n); for (i = 0; i <pow (n); i ++) { for (j = strlen (GrayCode [i]) - 1; j> = 0; j–) { putchar (GrayCode [i] [j]); } printf (”\ n"); } return 0; }













Determine si se puede organizar en código Gray

Dados dos códigos binarios de 8 bits, juzgue si los dos códigos se pueden organizar consecutivamente en código Gray. Otra forma de preguntar es si los dos códigos binarios difieren solo en un bit.
  A través de esta pregunta, aprendí cómo generar binarios en lenguaje C, y también revisé el uso relacionado de las operaciones de bits. Primero, use la operación OR exclusiva ^ en las dos cadenas de códigos binarios para obtener un nuevo código binario, y luego use la operación AND bit a bit & en el nuevo código en la forma de (1 << i).
  Hay un pequeño lugar al que prestar atención. El resultado después de la operación Y no se puede emitir directamente. Se debe juzgar si el resultado es 0, si no es 0, salida 1 o salida 0.
  El código específico es el siguiente:

#include <stdio.h>
#include <stdlib.h>

int ShowInBinary (término de carácter)
{ int i; int j; para (i = 7; i> = 0; i–) { j = (término & (1 << i)); if (j) { printf ("1"); } else { printf ("0"); } } printf ("\ n"); return 0; }
















int IsGrayOrNot (char term1, char term2)
{ char ch = term1 ^ término2; int i, j, count = 0;

for(i = 7; i >= 0; i--)
{
    j = ch & (1 << i);
    if(1 == j)
    {
        count++;
    }
}
if(count) return 1;
//ShowInBinary(ch);

return 0;

}

int main ()
{ char term1 = 0x9d; char term2 = 0x9e;

printf("%d", IsGrayOrNot(term1, term2));
//ShowInBinary(term1);
//ShowInBinary(term2);
return 0;

}

lenguaje java:

public static String[] getGray(int n){
    
    
        //先创建数组
        int size = (int)Math.pow(2,n);
        String[] arr = new String[size];

        if(n == 1){
    
    
            arr[0] = "0";
            arr[1] = "1";
            return arr;
        }

        //n-1时的数组
        String[] pre = getGray (n-1);

        for(int i = 0;i < pre.length;i++){
    
    
            arr[i] = "0" + pre[i];
            arr[arr.length-1-i] = "1" + pre[i];
        }
        return arr;
    }

Introducción detallada del código Gray de C ++
más implementación del código

Supongo que te gusta

Origin blog.csdn.net/angelsweet/article/details/111630049
Recomendado
Clasificación