C 언어 그레코드 관련
8283 단어 C 언어
그레코드의 생성
인접한 그레이코드 사이에는 한 개만 다르다. 이것은 전환할 때 여러 개의 동시 변화로 인한 지연 시간의 영향을 방지하기 위해서이다.구체적인 정의는 다음과 같다.
한 그룹 수의 인코딩에서 인접한 두 개의 코드가 한 개의 바이너리만 다르면 이를 그레코드(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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.