2진 코드 (Binary Code)
십진수 | 16진수 | Binary Code |
0 | 0 | 0000 |
1 | 1 | 0001 |
2 | 2 | 0010 |
3 | 3 | 0011 |
4 | 4 | 0100 |
5 | 5 | 0101 |
6 | 6 | 0110 |
7 | 7 | 0111 |
8 | 8 | 1000 |
9 | 9 | 1001 |
10 | A | 1010 |
11 | B | 1011 |
12 | C | 1100 |
13 | D | 1101 |
14 | E | 1110 |
15 | F | 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개만 바뀌는 코드이다.
숫자 | 그레이 코드 |
0 | 0000 |
1 | 0001 |
2 | 0011 |
3 | 0010 |
4 | 0110 |
5 | 0111 |
6 | 0101 |
7 | 0100 |
8 | 1100 |
9 | 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 |
댓글