카테고리 없음

[전공 중간고사 정리] 컴퓨터구조 Ch.02 – 데이터의 표현 (진법변환·보수·IEEE 754·에러검출코드)

gamjadori 2026. 7. 20. 21:42
728x90

Chapter 02. 데이터의 표현

1. 디지털 정보 단위 & 진법

비트 단위
bit: 1bit, 0 또는 1
nibble: 4bit, 16진수 1자리
byte: 8bit, 영문 1글자
한글: 16bit(2byte)
word: 가변, CPU 처리 단위

MSB & LSB
8비트 예: 1 0 1 1 0 1 0 0 → 맨 왼쪽이 MSB(최상위 비트), 맨 오른쪽이 LSB(최하위 비트)
MSB는 부호비트로 사용: 0→양수, 1→음수

SI 단위 vs IEC 단위
SI 단위(10진 기반): 1KB=1,000byte, 1MB=1,000KB, 1GB=1,000MB
IEC 단위(2진 기반, 실제 컴퓨터): 1KiB=1,024byte(2^10), 1MiB=1,024KiB(2^20), 1GiB=1,024MiB(2^30)

진법의 종류
2진법: 0,1
8진법: 0~7 (2진수 3자리=8진수 1자리)
10진법: 0~9
16진법: 0~9, A~F (A=10,B=11,…F=15)
※ 16진수를 쓰는 이유: 2진수를 4비트씩 묶으면 딱 16진수 1자리라 표현이 짧아짐

진수 대응표(암기)
0=0000=0(8)=0(16) / 1=0001=1=1 / 2=0010=2=2 / 3=0011=3=3
4=0100=4=4 / 5=0101=5=5 / 6=0110=6=6 / 7=0111=7=7
8=1000=10(8)=8(16) / 9=1001=11=9 / 10=1010=12=A / 11=1011=13=B
12=1100=14=C / 13=1101=15=D / 14=1110=16=E / 15=1111=17=F

2. 진법 변환

다른 진수 → 10진수 (자릿값 × 기수의 거듭제곱)
2진수: 1011(2) = 1×2³+0×2²+1×2¹+1×2⁰ = 11(10)
8진수: 113(8) = 1×8²+1×8¹+3×8⁰ = 75(10)
16진수: 4B(16) = 4×16¹+11×16⁰ = 75(10)

10진수 → 2진수 (나눗셈/곱셈 방법)
정수부: 2로 계속 나누고 나머지를 역순으로 (마지막 몫이 MSB)
소수부: 2를 계속 곱해서 나온 정수부를 순서대로 (첫 결과가 최상위)

예) 75.6875(10)
정수부 75: 75÷2 반복 → 1001011(2)
소수부 0.6875: ×2 반복 → .1011(2)
최종: 1001011.1011(2)

2진수 ↔ 8진수 ↔ 16진수 (묶기 방법)
소수점 기준 좌우로 묶기
8진수 변환: 3비트씩 묶기
16진수 변환: 4비트씩 묶기
비트 수 부족하면 앞/뒤에 0 채워서 맞춤

예) 1001011.1011(2)
8진수(3비트씩): 001 001 011 . 101 100 → 113.54(8)
16진수(4비트씩): 0100 1011 . 1011 → 4B.B(16)

예제) 48.8125(10) 변환
정수부 48 → 110000(2)
소수부 0.8125 → .1101(2)
결과: 110000.1101(2) = 60.64(8) = 30.D(16)

3. 정수 표현 (보수와 음수)

음수를 표현하는 3가지 방법 비교(+5, -5 예시, 8비트 기준)
부호와 절댓값: +5=00000101, -5=10000101, 부호비트만 반전(0이 두 개 존재: +0,-0)
1의 보수: +5=00000101, -5=11111010, 전체 비트 반전(0이 두 개)
2의 보수(★현재 모든 컴퓨터 표준): +5=00000101, -5=11111011, 0이 하나만 존재

2의 보수가 표준인 이유: 덧셈 회로 하나만으로 뺄셈도 수행 가능해서 하드웨어가 단순해짐

보수 만드는 방법
1의 보수: 모든 비트 반전(0→1, 1→0)
2의 보수: 1의 보수+1

빠른 2의 보수 방법(시험 단골)
LSB(오른쪽)부터 처음 나오는 1까지는 그대로 쓰고, 나머지 상위 비트는 모두 반전
예) 00110000(+48) → 하위 5비트(10000) 그대로, 상위 3비트(001→110) 반전 → 11010000(-48)
예) 11001101(-51) → LSB가 1이므로 1만 그대로, 나머지 반전 → 00110011(+51)

2의 보수 표현 범위: n비트 범위 -2^(n-1) ~ +2^(n-1)-1
4비트: -8~+7(16개) / 8비트: -128~+127(256개) / 16비트: -32,768~+32,767(65,536개) / 32비트: 약 -21억~+21억(약 43억 개)

2의 보수 → 10진수 변환
MSB=0이면 양수(그대로 계산)
MSB=1이면 음수(2의 보수를 취한 후 음수 부호를 붙임)

오버플로(Overflow)
연산 결과가 표현 범위를 초과하는 현상
검출법: 최상위 비트로 들어오는 캐리(직전 캐리)와 최종 캐리가 다르면 오버플로
해결: 더 큰 비트수로 부호 확장 후 계산

팩(Pack)/언팩(Unpack) 10진 형식
팩 10진: 1바이트=숫자 2개(각 4비트), 부호는 +:C(1100), -:D(1101)
언팩 10진: 1바이트=존(4비트)+숫자(4비트), 존 부분에 F(1111), 하위 바이트 존에 부호

4. 실수 표현 (IEEE 754 부동소수점)

IEEE 754 구조
단정도(32비트): S(부호 1비트)+E(지수 8비트)+M(가수 23비트)
배정도(64비트): S(부호 1비트)+E(지수 11비트)+M(가수 52비트)
바이어스: 단정도=127, 배정도=1023
바이어스를 쓰는 이유: 지수의 음수/양수를 부호 없이 표현하고 대소 비교를 빠르게 하기 위함

정규화(Normalization)
이진수를 1.xxxx × 2^n 형태로 만드는 것
예) 1001011.1011(2) → 소수점을 6자리 왼쪽으로 이동 → 1.0010111011(2)×2^6, 지수=6

10진수를 IEEE 754 단정도로 변환하는 순서

1. 10진수를 2진수로 변환
2. 1.xxxx × 2^n 형태로 정규화
3. 부호 비트 결정(양수=0, 음수=1)
4. 지수=n+127(바이어스 더하기), 8비트 2진수로 변환
5. 가수=소수점 뒤 비트(23비트, 부족하면 0으로 채움)

예제) 1/256을 단정도로
1/256=2^(-8) → 이미 정규화: 1.0×2^(-8)
S=0, E=-8+127=119=01110111(2), M=00000000000000000000000
결과: 0 01110111 00000000000000000000000

5. 디지털 코드

BCD 코드(8421 코드)
10진수 각 자리를 4비트 2진수로 표현. 0000(0)~1001(9)만 사용, 1010~1111은 사용 안 함
예) 237(10) → 0010 0011 0111
BCD 덧셈: 9 초과 시 6을 더함

3초과 코드(Excess-3)
BCD 코드에 3(0011)을 더한 코드
자기 보수 성질: 0↔9, 1↔8, 2↔7, 3↔6, 4↔5가 1의 보수 관계

그레이 코드(Gray Code)
연속 코드 사이 1비트만 변화, 가중치 없음, A/D 변환기에 사용
2진수→그레이: G3=B3, G2=B3⊕B2, G1=B2⊕B1, G0=B1⊕B0
그레이→2진수: B3=G3, B2=B3⊕G2, B1=B2⊕G1, B0=B1⊕G0
예) 1011(2) → 1110(Gray)

가중치 코드 vs 비가중치 코드
가중치 코드(각 비트에 값 있음): 8421(BCD), 2421, 5421, 74-2-1
비가중치 코드(위치값 없음): 3초과 코드, 그레이 코드
※ 2421 코드는 일부 숫자가 표현 방법 2가지 존재(예: 3=0011 or 1001)

영숫자 코드(문자 코드)
표준 BCD: 6비트, 최대 64가지
ASCII: 7비트, 128가지, 가장 많이 사용(ANSI 제정)
EBCDIC: 8비트, 256가지, IBM 대형 컴퓨터용
유니코드: 가변(UTF-8/16/32), 1,117,111개, 국제 표준(한글 11,172자 포함)

6. 에러 검출 코드

패리티 비트(Parity Bit)
짝수 패리티: 전체 1의 개수가 짝수가 되도록 패리티 비트 추가
홀수 패리티: 전체 1의 개수가 홀수가 되도록 패리티 비트 추가
한계: 에러 검출만 가능(정정 불가), 홀수 개 비트 에러만 검출, 짝수 개 에러는 검출 못함

예제) 짝수 패리티 시스템에서 에러 검출
10110 → 1이 3개(홀수) → 에러
110011 → 1이 4개(짝수) → 정상

해밍 코드(Hamming Code) — 에러 정정 가능
공식: 2^p ≥ d+p+1 (d=데이터 비트 수, p=패리티 비트 수)
예) d=8일 때: 2^4=16 ≥ 8+4+1=13 → p=4 필요
패리티 비트 위치: 2의 거듭제곱 자리(1,2,4,8…)
P1 담당: 1,3,5,7,9,11 / P2 담당: 2,3,6,7,10,11 / P4 담당: 4,5,6,7,12 / P8 담당: 8,9,10,11,12

에러 위치 찾기

1. 각 패리티 비트 검사(짝수 패리티 기준)
2. 결과를 P8 P4 P2 P1 순서로 나열
3. 0000이면 에러 없음
4. 다른 값이면 10진수로 변환한 값이 에러 위치

CRC(순환 중복 검사)
가장 강력한 에러 검출: 랜덤 에러+버스트 에러 모두 검출, 오버헤드 적음
원리: 데이터를 키(생성 다항식)로 나눔 → 나머지를 FCS로 붙여 전송 → 수신측에서 나머지=0이면 정상
모듈로-2 연산: 캐리 무시, 덧셈=뺄셈=XOR (0⊕0=0, 0⊕1=1, 1⊕1=0)
생성 다항식 종류: CRC-16(8비트 문자, HDLC), CRC-CCITT(HDLC, X.25), CRC-32(이더넷, ZIP파일)

Ch.02 최종 암기 요약

진법 변환
2진→8진: 3비트씩 묶기 / 2진→16진: 4비트씩 묶기
10진→2진 정수: 2로 나누기, 나머지 역순 / 10진→2진 소수: 2 곱하기, 정수 순서대로

보수
1의 보수=전체 비트 반전 / 2의 보수=1의 보수+1
빠른 2의 보수: LSB부터 첫 1까지 그대로, 나머지 반전
오버플로: 직전 캐리≠최종 캐리

IEEE 754
단정도: 1+8+23=32비트, 바이어스 127
배정도: 1+11+52=64비트, 바이어스 1023
정규화: 1.xxxx × 2^n 형태

에러 코드
BCD 9 초과 시 → +6 더하기
3초과 코드=BCD+3
해밍: 2^p ≥ d+p+1
CRC 나머지=0 → 에러 없음