본문 바로가기

Programming/Algorithm

그레이 코드(gray code) 와 이진 코드(binary code) 변환

반응형

그레이 코드란 숫자를 표기하는 2진 표기법 중 하나이다.


10진수2진수(바이너리 코드)그레이 코드
000000000
100010001
200100011
300110010
401000110
501010111
601100101
701110100
810001100
910011101
1010101111





[2진수와 그레이 코드 차이점]

10진수 3 --> 4 로 값이 1이 증가하는 경우에 

바이너리코드 0011 --> 0100 즉 [2:0]번 bit들의 값이 바뀌었다.

(물론, 10진수 4 --> 5로 값이 1 증가하는 경우에 

 바이너리코드 0100 --> 0110 [1]번 bit의 값만 바뀌기도 한다.)

즉, 값이 1씩 증가하거나, 1씩 감소할 때 바뀌는 bit의 갯수는 그때그때마다 다르다.


반면에

그레이 코드의 경우엔 항상 하나의 bit만 바뀐다.

10진수 0 --> 1 로 값이 1이 증가하는 경우에 

그레이코드는 0000 --> 0001 즉 [0]번 bit의 값만 바뀌었다.

...

10진수 9 --> 10 으로 값이 1이 증가하는 경우에

그레이코드는 1101 --> 1111 즉 [1]번 bit의 값만 바뀌었다.





[바이너리 코드--> 그레이 코드 변환]

10진수에서 그레이코드로 바로 변환할 수는 없다. 

10진수 --> 바이너리 코드 --> 그레이 코드로 변환할 수 있다.


변환하는 방법 MSB는 그대로 사용하고, 그 다음부터는 인접한 bit끼리 XOR연산을 하면 된다.

EX) 1001(binary) --> 1101(gray)













[그레이 코드--> 바이너리 코드 변환]

마찬가지로 그레이코드를 바로 10진수로 변환할 수는 없다. 

그레이 코드 --> 바이너리 코드 --> 10진수 로 변환할 수 있다.


변환하는 방법 MSB는 그대로 사용하고, 나온 결과값과 그 다음 bit를 XOR연산을 하면 된다.

EX) 1101(gray) -->  1001(binary)














[그레이 코드 사용 목적]

순차적으로 값이 증감하는 경우에 한 bit만 변경해 주면 되므로 속도가 빨라진다. 

한 예로 watchdog timer의 counter 값이 gray code로 1씩 감소하게 되어있다.

반응형