그레이 부호

+비트 너비 별 그레이 부호2비트 4비트0001111000000001001100100110011101010100110011011111111010101011100110003비트000001011010110111101100
그레이 부호 또는 그레이 코드(는 이진법 부호의 일종으로, 연속된 수가 1개의 비트만 다른 특징을 지닌다. 연산에는 쓰이진 않고 주로 데이터 전송, 입출력 장치, 아날로그-디지털 간 변환과 주변장치에 쓰인다.이한출판사 출판, 《컴퓨터 구조》 오상엽 저. p.150

 역사 
섬네일|500px|가운데|그레이의 특허 앞장의 일부. 바이너리 코드(15)의 PCM 튜브(10)를 보여주고 있다.

 그레이 부호로의 변환 
C에서 다음의 함수는 이진 숫자와 관련 그레이 부호 간의 변환을 나타낸다. 그레이 대 이진 변환이 각 비트가 한 번에 처리되어야 하는 것처럼 보이지만, 더 빠른 알고리즘들이 존재한다.Henry Gordon Dietz. "The Aggregate Magic Algorithms: Gray Code Conversion"

/*
 * This function converts an unsigned binary
 * number to reflected binary Gray code.
 *
 * The operator >> is shift right. The operator ^ is exclusive or.
 */
unsigned int binaryToGray(unsigned int num)
{
    return num ^ (num >> 1);
}

/*
 * This function converts a reflected binary
 * Gray code number to a binary number.
 * Each Gray code bit is exclusive-ored with all
 * more significant bits.
 */
unsigned int grayToBinary(unsigned int num)
{
    unsigned int mask;
    for (mask = num >> 1; mask != 0; mask = mask >> 1)
    {
        num = num ^ mask;
    }
    return num;
}

/*
 * A more efficient version, for Gray codes of 32 or fewer bits.
 */
unsigned int grayToBinary32(unsigned int num)
{
    num = num ^ (num >> 16);
    num = num ^ (num >> 8);
    num = num ^ (num >> 4);
    num = num ^ (num >> 2);
    num = num ^ (num >> 1);
    return num;
}

 같이 보기 
 선형 되먹임 시프트 레지스터
 스테인하우스-존슨-트로터 알고리즘
 힐베르트 곡선
 각주 

분류:데이터 전송
분류:기수법
분류:이진 산술