그레이스케일 코드

8898 단어 BinaryC++

회색 코드


2진법의 표현 중의 하나다.수량이 1씩 줄었을 때 항상 1위만 바뀌는 것이 특징이다.1비트에 불과한 변화로 오작동을 일으키기 어려워 디지털 회로 등에 활용됐다.

이진 코드


일반 컴퓨터에서 사용하는 이진 표현식

왜 필요해


바이너리 코드에서, 숫자가 증가하거나 감소할 때, 여러 비트는 바꿀 수 있다.예를 들어 7 ->8이 될 때.
0111
1000
따라서 4비트의 양은 달라진다.디지털 회로에서 4자리 변화 시 변화 속도에 따라 0111->0000 상태가 되거나 0111->11111 상태가 되면 잘못된 데이터 처리 가능성이 높아진다.가능한 한 수량을 줄이고 증감할 때의 비트 변화를 줄이면 오작동이 일어나기 쉽다.

2진 코드와 그레이스케일 코드 비교


십진수
Binary Code
Gray Code
0
0000
0000
1
0001
0001
2
0010
0011
3
0011
0010
4
0100
0110

2진 코드에서 그레이스케일 코드로 변환


그레이스케일은 바이너리 코드를 오른쪽으로 이동시켜 XOR로 정의합니다.
//BinaryCode -> GrayCode
unsigned int convertBinaryToGrayCode(unsigned int n) {
    return n ^ (n >> 1);
}

그레이스케일에서 이진 코드로 변환


그레이스케일 코드에서 2진 코드로 변환할 때 다음과 같은 규칙을 따른다.
1. 가장 높은 1은 같다
2.다음은 상위부터 두 분씩
3. 1 또는 0이 연속되면 그레이스케일은 0이고 연속되지 않으면 1입니다.

이런 정의지만 코드로 표현하면 다음과 같다.
//GrayCode -> BinaryCode
unsigned int convertGrayToBinary(unsigned int n) {
    unsigned mask = n;
    while (mask) {
        mask >>= 1;
        n ^= mask;
    }
    return n;
}

확인


다음은 1~10까지 그레이스케일로 변환하는 코드입니다.
#include <iostream>
#include <bitset>
#include <time.h>
using namespace std;
#define rep(i,s,n)for(ll i = s;i<n;i++)

//BinaryCode -> GrayCode
unsigned int convertBinaryToGrayCode(unsigned int n) {
    return n ^ (n >> 1);
}

//GrayCode -> BinaryCode
unsigned int convertGrayToBinary(unsigned int n) {
    int mask = n;
    while (mask) {
        mask >>= 1;
        n ^= mask;
    }
    return n;
}

int main() {
    int p = convertBinaryToGrayCode(13);
    int a[10];
    cout << "BinaryCode -> GrayCode" << endl;
    for (int i = 0; i < 10; ++i) {
        //変換
        a[i] = convertBinaryToGrayCode(i);
        //Bitsetを使用して表示
        cout << i << "=" << bitset<4>(i) << ":" << bitset<4>(a[i]) << endl;
    }
    cout << endl;

    cout << "Graycode -> Binarycode" << endl;
    for (int i = 0; i < 10; ++i) {
        //変換
        int x = convertGrayToBinary(a[i]);
        //Bitsetを使用して表示
        cout << bitset<4>(a[i]) << ":" << bitset<4>(x) << "=" << x << endl;
    }
}
실행 결과
BinaryCode -> GrayCode
0=0000:0000
1=0001:0001
2=0010:0011
3=0011:0010
4=0100:0110
5=0101:0111
6=0110:0101
7=0111:0100
8=1000:1100
9=1001:1101
10=1010:1111

graycode -> binarycode
0000:0000=0
0001:0001=1
0011:0010=2
0010:0011=3
0110:0100=4
0111:0101=5
0101:0110=6
0100:0111=7
1100:1000=8
1101:1001=9
1111:1010=10

좋은 웹페이지 즐겨찾기