본문 바로가기
컴퓨터

바이너리, BCD, 그레이 코드 변환 방법

by Begi 2018. 10. 13.
반응형

2진 코드 (Binary Code)

십진수  16진수  Binary Code 
0000 
0001 
0010 
0011 
0100 
0101 
0110 
0111 
1000 
1001 
10  1010 
11  1011 
12  1100 
13  1101 
14  1110 
15  1111 

 

BCD (Binary-Coded Decimal) 코드

십진수 21에서 2는 '0010'이고 1은 '0001'이고, 21을 BCD로 변환하면 '0010001'이다. 8비트 BCD는 십진수 0~99까지 나타낼 수 있다.

 

그레이 코드 (Gray Code)

그레이 코드 (Gray Code)는 RBC (Reflected Binary Code)라고도 한다. 그레이 코드는 숫자를 2진수로 표현할 때 이웃하는 숫자 사이에는 비트가 1개만 바뀌는 코드이다.

 

숫자  그레이 코드 
 0000
 0001
 0011
 0010
 0110
 0111
 0101
 0100
 1100
 1101
10   1111
11   1110
12   1010
13   1011
14   1001
15   1000

 

그레이 코드에서 비트 0 자리에서는 0 또는 1이 2개씩 연속으로 나타나고 비트 1자리에서는 4개씩 연속으로 나타나고 비트 2자리에서는 8개씩 연속으로 나타나고 비트 3자리에서는 16개씩 연속으로 나타난다.

 

모터 엔코더와 같이 값이 연속적으로 변하는 곳에 사용하면 값을 읽는 동안 발생하는 비트 변화에 의한 오류가 발생하지 않는다.

 

그레이 코드 변환

바이너리 코드를 그레이 코드로 변경하는 방법은 다음과 같다. 

 

1비트의 그레이 코드는 0-1 이다. 1비트의 그레이 코드로 2비트이 그레이 코드를 생성하기 위해서는 다음과 같이 0-1을 미러시켜 0-1-1-0으로 적는다. 그리고, 0-1 앞에는 0을 붙이고 1-0 앞에는 1을 붙인다.

 

 

2비트의 그레이 코드는 00-01-11-10 이다. 2비트의 그레이 코드로 3비트이 그레이 코드를 생성하기 위해서는 다음과 같이 00-01-11-10을 미러시켜 00-01-11-10-10-11-01-00 으로 적는다. 그리고, 00-01-11-10 앞에는 0을 붙이고 10-11-01-00  앞에는 1을 붙인다.

 

 

그레이 코드 변환 프로그램

그레이 코드를 바이너리 코드로 변환하는 C 코드는 다음과 같다.

 unsigned int BinaryToGray(unsigned int num)
 {
    return num ^ (num >> 1);
 }
 unsigned int GrayToBinary(unsigned int num)
 {
    unsigned int mask = num >> 1;
    while (mask != 0)
    {
        num = num ^ mask;
        mask = mask >> 1;
    }
    return num;
 }

 

 

반응형

'컴퓨터' 카테고리의 다른 글

데이터 압축률 계산식  (0) 2019.01.27
안드로이드 문제 해결  (0) 2018.12.15
프로그래머용 엑셀표  (2) 2018.10.09
OpenCV Mat 복사  (0) 2018.09.30
그래프와 트리 차이  (0) 2018.09.15

댓글