1. Code 란?
- Code(암호) : 코드는 암호화 전/후가 달라야하며, 암호자와 복호자 사이에 약속된 일정한 규칙에 의해 생성되어야 함. 암호화 전/후가 같거나 규칙이 일정하지 않으면 그것은 Non-Code (비암호)라고 함.
- 최소비트 : $2^{n-1}$ ~ $2^n$개의 사건을 구분하기 위해서 $n$개의 비트가 반드시 필요 (9~16개 사건 구분 → 4개의 비트가 반드시 필요)
2. Code의 종류 개요
1) Binary Code (2진 코드) : 2진수로 나타낸 코드, 각 자리수가 의미하는 값이 다르게 가중되기 때문에 가중코드이며 21코드라고 부를 수 있음.
구분 | 1째 자리수 | 2째 자리수 |
0 | 0 | 0 |
1 | 0 | 1 |
2 | 1 | 0 |
3 | 1 | 1 |
2) Excess-1 Code (1초과 코드) : 2진코드에 일정한 숫자를 n을 더한 것을 n초과 코드(Excess-n code)라고 함. 각 자리가 가중치를 의미하지 않기 때문에 비가중 코드라고함. n초과 코드들 중 3초과 코드가 가장 유명함
구분 | 1째 자리수 | 2째 자리수 |
0 | 0 | 1 |
1 | 1 | 0 |
2 | 1 | 1 |
3 | 0 | 0 |
3) 2 out of 4 code : 항상 n개의 비트에서 1의 개수가 반드시 m개인 코드를 m out of n 코드라고 함. 1의 개수가 반드시 일정해야하는데 중간에 노이즈가 껴서 1의 수가 변경되면 에러를 검출할 수 있음. 때문에 이런 코드를 에러검출코드(Error Detection Code)라고 함.
3. 10진코드의 종류
10진코드란 10개의 사건(0~9)를 구별하기 위한 코드. 10개의 사건은 9와 16의 사이이므로 최소 4개의 비트가 필요함.
1) 8421 Code (BCD Code) : 10개의 사건을 구분하는 2진코드, 8421코드라고도 불리며 Binary Code Demical (10진수 2진코드)라는 말로 BCD코드라고도 불림. 정확히는 8421, 5421, 2421 등의 코드를 BCD코드라고 하고, 8421은 가장 대표적인 BCD코드임.
구분 | 1째 자리 (8) | 2째 자리 (4) | 3째 자리 (2) | 4째 자리 (1) |
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 1 |
2 | 0 | 0 | 1 | 0 |
3 | 0 | 0 | 1 | 1 |
4 | 0 | 1 | 0 | 0 |
5 | 0 | 1 | 0 | 1 |
6 | 0 | 1 | 1 | 0 |
7 | 0 | 1 | 1 | 1 |
8 | 1 | 0 | 0 | 0 |
9 | 1 | 0 | 0 | 1 |
2) 84-2-1 Code : 코드는 가운데인 4와 5를 기준으로 [0, 9], [1, 8], [2, 7], ... 와 같이 더해서 9가 되는 수들의 집합이 1의 보수가 되는 특이한 성질이 있음. 이러한 코드를 자기보수코드(Self Complement Code)라고 부름.
구분 | 1째 자리 (8) | 2째 자리 (4) | 3째 자리 (-2) | 4째 자리 (-1) |
0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 1 | 1 |
2 | 0 | 1 | 1 | 0 |
3 | 0 | 1 | 0 | 1 |
4 | 0 | 1 | 0 | 0 |
5 | 1 | 0 | 1 | 1 |
6 | 1 | 0 | 1 | 0 |
7 | 1 | 0 | 0 | 1 |
8 | 1 | 0 | 0 | 0 |
9 | 1 | 1 | 1 | 1 |
3) 2421 Code : 2, 4, 2, 1의 가중치를 가지는 코드. 2421코드 역시 Self Complement Code임.
구분 | 1째 자리 (2) | 2째 자리 (4) | 3째 자리 (2) | 4째 자리 (1) |
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 1 |
2 | 0 | 0 | 1 | 0 |
3 | 0 | 0 | 1 | 1 |
4 | 0 | 1 | 0 | 0 |
5 | 1 | 0 | 1 | 1 |
6 | 1 | 1 | 0 | 0 |
7 | 1 | 1 | 0 | 1 |
8 | 1 | 1 | 1 | 0 |
9 | 1 | 1 | 1 | 1 |
4) 5043210 Code : 5, 0, 4, 3, 2, 1, 0의 가중치를 갖는 코드. 2 out of 7 Code이며 오류 검출을 위해 사용될 수 있음.
구분 | 1째 자리 (5) | 2째 자리 (0) | 3째 자리 (4) | 4째 자리 (3) | 5쨰 자리 (2) | 6째 자리 (1) | 7째 자리 (0) |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
2 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
3 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
4 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
5 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
6 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
7 | 1 | 0 | 0 | 0 | 1 | 0 | 0 |
8 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
9 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
5) Excess-3 Code (3초과 코드) : 84-2-1 Code나 2421Code는 자기보수코드이지만 가중치코드임. 3초과 코드의 경우 자기보수 코드이면서 비가중치 코드임.
구분 | 1째 자리 | 2째 자리 | 3째 자리 | 4째 자리 |
0 | 0 | 0 | 1 | 1 |
1 | 0 | 1 | 0 | 0 |
2 | 0 | 1 | 0 | 1 |
3 | 0 | 1 | 1 | 0 |
4 | 0 | 1 | 1 | 1 |
5 | 1 | 0 | 0 | 0 |
6 | 1 | 0 | 0 | 1 |
7 | 1 | 0 | 1 | 0 |
8 | 1 | 0 | 1 | 1 |
9 | 1 | 1 | 0 | 0 |
4. 3초과 코드의 연산
1) 연산 법칙
- 캐리가 발생하지 않은 자리 → 3을 뺀다. (각각 3씩 6이 더해졌으므로 3을 뺀다)
- 캐리가 발생한 자리 → 3을 더한다. (캐리로 못올라가고 남은 수는 8421코드이다)
- 새롭게 추가된 자리 → 3을 더한다. (새로운 자리는 1이 아니라 4로 올려야한다)
이 법칙들을 적용하여 26 + 88을 계산해봄. 0101 1001 + 1011 1011의 중간 계산 결과는 0001 0001 0100이다. 첫째자리수는 추가된 자리수이기 때문에 3을 더하고 아래 두 자리에서 모두 캐리가 발생했으므로 모두 3을 더해주면 0100 0100 0111이고, 이는 114로 잘 계산됨.
2) 3초과 코드를 사용하는 이유 : Self Compliment 코드이면서 연산이 비교적 간단함. 때문에 보수계산을 이용하여 뺄셈 연산을 덧셈 연산으로 구현하기에 용이함.
5. Reference
'논리회로' 카테고리의 다른 글
코드 (4) - 알파뉴메릭 코드 (ASCII, ANSI, Unicode) (0) | 2020.01.28 |
---|---|
코드 (3) - 패리티 비트 & 해밍 코드 (1) | 2020.01.28 |
코드 (2) - 그레이 코드 (0) | 2020.01.28 |
음수 표현법 (보수) (0) | 2020.01.21 |
이진 연산 (0) | 2020.01.17 |
진법과 변환 (0) | 2020.01.17 |
디지털 시스템 (0) | 2020.01.17 |