그레이스케일 코드
회색 코드
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
Reference
이 문제에 관하여(그레이스케일 코드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/redpeaks33/items/90ed199549be32cc4e79텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)