🔤 자료 표현 · 코드 체계 (5과목)
컴퓨터는 0과 1밖에 모른다. 그래서 숫자·문자·부호를 어떤 규칙으로 0과 1에 대응시킬 것인가 가 문제가 되고,
그 규칙들이 곧 코드 체계다. 진수 변환이 계산이라면 이 단원은 약속을 다룬다.
📦 자료의 단위
비트(Bit) ─ 0 또는 1, 정보의 최소 단위
└ 니블(Nibble) = 4비트 = 16진수 한 자리
└ 바이트(Byte) = 8비트 = 문자 1개 = 16진수 두 자리
└ 워드(Word) = CPU가 한 번에 처리하는 단위 (Half 2 / Full 4 / Double 8 byte)
└ 필드 → 레코드 → 파일 → 데이터베이스
🔢 수치 자료 표현 — 고정소수점 vs 부동소수점
| 방식 | 구조 | 특징 |
|---|---|---|
| 부호와 절대치 | 맨 앞 1비트 = 부호, 나머지 = 크기 | 가장 단순하지만 0이 +0과 −0 두 개로 표현됨 |
| 1의 보수 | 모든 비트 반전 | 8비트 범위 −127 ~ +127. 역시 0이 두 개 |
| 2의 보수 | 1의 보수 + 1 | 8비트 범위 −128 ~ +127. 0이 하나뿐 → 실제로 사용되는 방식 |
| 부동소수점 | 부호(1) + 지수부 + 가수부 | 표현 범위가 매우 넓음. 대신 연산이 느리고 회로가 복잡 |
| 팩 / 언팩 10진 | 10진수를 4비트씩 묶어 저장 | 팩은 1바이트에 두 자리, 언팩은 한 자리. 사무·금융 연산용 |
📖 2의 보수 표현 범위 공식
n비트 2의 보수 → −2ⁿ⁻¹ ~ +(2ⁿ⁻¹ − 1)
8비트 → −128 ~ +127 · 16비트 → −32,768 ~ +32,767
음수 쪽이 하나 더 많은 이유는 0을 양수 쪽에서 한 자리 쓰기 때문이다.
n비트 2의 보수 → −2ⁿ⁻¹ ~ +(2ⁿ⁻¹ − 1)
8비트 → −128 ~ +127 · 16비트 → −32,768 ~ +32,767
음수 쪽이 하나 더 많은 이유는 0을 양수 쪽에서 한 자리 쓰기 때문이다.
부동소수점 정규화 — 가수부의 첫 자리가 0이 되지 않도록 소수점 위치를 조정하는 것.
같은 값을 여러 방식으로 표현할 수 있는 문제를 없애고 정밀도를 최대로 확보한다.
🌳 코드의 분류 — 계통부터 잡기
코드
├─ 가중치 코드 (Weighted) — 각 자리에 고정된 값이 있음
│ BCD(8421) · 2421 · 51111 · 바이퀴너리
│
├─ 비가중치 코드 (Non-weighted) — 자릿값이 없음
│ 3초과(Excess-3) · 그레이(Gray)
│
├─ 자기보수 코드 (Self-complementing)
│ 3초과 · 2421 · 51111 · 84-2-1
│ → 1의 보수를 취하면 그대로 9의 보수가 되는 코드
│
└─ 오류검출 코드
패리티 · 해밍 · 바이퀴너리 · 링카운터 · 2 out of 5
| 코드 | 분류 | 특징 · 출제 포인트 |
|---|---|---|
| BCD (8421) | 가중치 | 10진 한 자리를 4비트로. 1010~1111은 사용하지 않음(6개 미사용) 기출 |
| 3초과 Excess-3 | 비가중치 자기보수 |
BCD에 +3(0011). 10진 0 = 0011, 9 = 1100 |
| 그레이 Gray | 비가중치 | 인접한 두 수가 단 1비트만 다름 → 아날로그/디지털 변환 오차 방지, 위치 검출기 |
| 2421 / 51111 | 가중치 자기보수 | 자릿값이 8421이 아닌 변형 코드 |
| 바이퀴너리 | 가중치 오류검출 | 7비트(5043210). 항상 1이 2개 |
| 2 out of 5 | 오류검출 | 5비트 중 정확히 2개가 1 → 개수만 세도 오류 판별 |
| 해밍 코드 | 오류정정 | 검사비트 2ʳ ≥ n+r+1. 1비트 정정 · 2비트 검출 |
⚠ 최다 함정 — 자기보수 코드
"1의 보수를 취했을 때 9의 보수가 되는 코드" 를 묻는 문제가 반복 출제된다. 답은 3초과 · 2421 · 51111 · 84-2-1. BCD(8421)는 자기보수 코드가 아니다 — 이것이 오답 유도 1순위다.
"1의 보수를 취했을 때 9의 보수가 되는 코드" 를 묻는 문제가 반복 출제된다. 답은 3초과 · 2421 · 51111 · 84-2-1. BCD(8421)는 자기보수 코드가 아니다 — 이것이 오답 유도 1순위다.
🔁 그레이 코드 변환 — 계산 문제
2진 → 그레이 (최상위는 그대로, 나머지는 이웃 비트끼리 XOR)
2진 1 0 1 1
│ ╲ │╲ │╲
↓ ⊕ ⊕ ⊕
그레이 1 1 1 0
① 1 그대로 ② 1⊕0=1 ③ 0⊕1=1 ④ 1⊕1=0 → 1110
그레이 → 2진 (최상위는 그대로, 이후 앞의 "결과"와 XOR)
그레이 1 1 1 0
2진 1 0 1 1
① 1 그대로 ② 1⊕1=0 ③ 0⊕1=1 ④ 1⊕0=1 → 1011
차이가 딱 하나 — 2진→그레이는 원본끼리 XOR, 그레이→2진은 방금 구한 결과와 XOR.
이 하나만 구분하면 양방향 모두 풀린다.
🔡 문자 코드 비교
| 코드 | 비트 수 | 표현 개수 | 비고 |
|---|---|---|---|
| BCD 코드 | 6비트 | 64자 | 존 2 + 디지트 4. 영문 소문자 표현 불가 |
| ASCII | 7비트 | 128자 | 존 3 + 디지트 4. 데이터 통신 표준. 'A'=65, 'a'=97, '0'=48 기출 |
| EBCDIC | 8비트 | 256자 | 존 4 + 디지트 4. IBM 대형 컴퓨터용 |
| 유니코드 | 16비트 | 65,536자 | 전 세계 문자 통합. 한글 포함 |
📖 외우는 법 — 6 · 7 · 8 · 16 순서로 커진다.
BCD(6) → ASCII(7) → EBCDIC(8) → 유니코드(16). 표현 개수는 각각 2ⁿ이다.
'A'=65인 것만 알면 'a'=97(+32), '0'=48은 자동으로 따라온다.
'A'=65인 것만 알면 'a'=97(+32), '0'=48은 자동으로 따라온다.
🔗 이어지는 단원
📝 시험 포인트
• 니블 4 · 바이트 8 · 16진 한 자리 = 4비트
• 2의 보수 n비트 범위 = −2ⁿ⁻¹ ~ 2ⁿ⁻¹−1 (8비트 −128~+127)
• 가중치 = BCD·2421·51111 / 비가중치 = 3초과·그레이
• 자기보수 = 3초과·2421·51111·84-2-1 (BCD는 아님!)
• 그레이 = 인접 수가 1비트만 차이 → A/D 변환 오차 방지
• BCD 6 / ASCII 7 / EBCDIC 8 / 유니코드 16 비트
• BCD는 1010~1111 미사용
• 니블 4 · 바이트 8 · 16진 한 자리 = 4비트
• 2의 보수 n비트 범위 = −2ⁿ⁻¹ ~ 2ⁿ⁻¹−1 (8비트 −128~+127)
• 가중치 = BCD·2421·51111 / 비가중치 = 3초과·그레이
• 자기보수 = 3초과·2421·51111·84-2-1 (BCD는 아님!)
• 그레이 = 인접 수가 1비트만 차이 → A/D 변환 오차 방지
• BCD 6 / ASCII 7 / EBCDIC 8 / 유니코드 16 비트
• BCD는 1010~1111 미사용