C 언어 그레코드 관련

8283 단어 C 언어
요 며칠 동안 몇 회사의 모의 온라인 평가 문제를 풀었는데 모두 그레코드에 관한 지식이 있고 일부는 2진법과 위치 연산에 활용해야 한다. 이런 것들은 내가 잘 알지 못하기 때문에 오늘 그레코드를 이용해서 이 지식들을 모두 기록해 보자.
그레코드의 생성
인접한 그레이코드 사이에는 한 개만 다르다. 이것은 전환할 때 여러 개의 동시 변화로 인한 지연 시간의 영향을 방지하기 위해서이다.구체적인 정의는 다음과 같다.
한 그룹 수의 인코딩에서 인접한 두 개의 코드가 한 개의 바이너리만 다르면 이를 그레코드(Gray Code)라고 하고, 또 최대 수와 최소수 사이에도 한 자릿수만 다른'처음과 끝이 연결되어 있기 때문에 순환 코드나 반사 코드라고도 부른다.디지털 시스템에서는 항상 코드가 일정한 순서에 따라 변화하도록 요구한다.예를 들어 자연수에 따라 계수를 점차적으로 늘리면 8421야드를 사용하면 수0111이 1000으로 변할 때 네 자리는 모두 변화해야 한다. 실제 회로에서 네 자리의 변화가 절대적으로 동시에 발생할 수 없고 계수에 짧은 다른 코드(1100, 111 등)가 나타날 수 있다.특정 상황에서 회로 상태 오류나 입력 오류가 발생할 수 있습니다.그레코드를 사용하면 이런 오류를 피할 수 있다.그레코드는 여러 가지 인코딩 형식이 있다.
n 비트의 그레이 코드가 생기려면, 그레이 코드의 개수는 2^n입니다.처음에 여기에서 2n인 줄 착각한 후에 함수 계산 2^n을 다시 설계하여 문제를 해결하였다.
디자인 방법: 첫 번째 단계: 0, 1 두 문자열을 생성합니다.두 번째 단계: 첫 번째 단계를 토대로 모든 문자열에 0과 1을 더하지만 매번 하나만 추가할 수 있기 때문에 두 번을 해야 한다.이렇게 하면 00,01,11,10이 된다.세 번째 단계: 두 번째 단계를 토대로 모든 문자열에 0과 1을 추가한다. 마찬가지로 매번 하나만 추가할 수 있다. 그러면 000000101101010111101100이 된다.자, 이렇게 해서 3비트 그레이코드를 생성합니다.만약에 4차원 그레이코드를 생성하려면 우리는 3차원 그레이코드에 0,1을 더하면 된다. 000000010011001001101010101010101011011010101010101010111110101111111100100110.즉, n비트 그레코드는 n-1비트 그레코드를 바탕으로 만들어진 것이다.다음은 코드입니다. 귀속을 이용하여 n비트 그레코드를 생성합니다.
#include 
#include 

#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;
    }
    for(i = 1; i < m; i++)
    {
        sum *= 2;
    }
    return sum;
}

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

    if(1 > n)
    {
        printf("Wrong!
"
); 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("
"
); } return 0; }

그레코드로 배열할 수 있는지 없는지를 판단하다
두 개의 8비트 2진 코드를 제시하여 이 두 코드가 그레코드로 연속적으로 배열될 수 있는지 판단한다.다른 질문은 바로 이 두 이진 코드가 단지 한 개의 차이만 있는지의 여부이다.이 문제를 통해 C 언어에서 어떻게 2진법을 출력하는지 알아보고 하위 연산과 관련된 용법을 복습했다.우선 두 줄의 이진 코드를 이차 또는 연산하여 새로운 이진 코드를 얻은 다음에 새로운 코드를 (1<#include #include int ShowInBinary(char term) { int i; int j; for(i = 7; i >= 0; i--) { j = (term & (1 << i)); if(j) { printf("1"); } else { printf("0"); } } printf("
"
); return 0; } int IsGrayOrNot(char term1, char term2) { char ch = term1 ^ term2; 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; }

좋은 웹페이지 즐겨찾기