📌 컴퓨터의 정보 단위와 인코딩 (비트, 바이트, 숫자, 문자, 인코딩 개념 총정리)
컴퓨터는 0과 1로 모든 정보를 처리하는데, 숫자와 문자, 데이터가 저장되는 방식이 어떻게 다르고,
왜 2진수, 16진수, 인코딩이 필요한지 정리해봄.
1. 정보 단위 (비트, 바이트, 워드)
✅ 1.1 비트(Bit)와 정보 표현
- 비트(bit): 0과 1을 표현하는 가장 작은 정보 단위
- 1비트로 표현할 수 있는 정보의 개수 = 2^1 = 2가지 (예: 0 = 꺼짐, 1 = 켜짐)
- n비트로 표현할 수 있는 정보 개수 = 2^n
- 예) 8비트(1바이트) → 2^8 = 256가지 표현 가능
✅ 1.2 바이트(Byte)와 데이터 크기
단위크기설명
1 바이트 | 8 비트 | 최소한의 데이터 저장 단위 |
1 킬로바이트 (KB) | 1,000 바이트 | 작은 텍스트 파일 |
1 메가바이트 (MB) | 1,000 KB | MP3 한 곡 (약 3MB) |
1 기가바이트 (GB) | 1,000 MB | 고화질 영화 (4GB~) |
1 테라바이트 (TB) | 1,000 GB | 대량의 데이터 저장 |
1KB = 1024바이트 가 정확한 정의지만, 일부 시스템에서는 1000바이트로도 사용함.
2. 워드(Word)와 CPU 데이터 처리
- 워드(Word): CPU가 한 번에 처리할 수 있는 데이터 크기
- 32비트 CPU → 32비트 워드 사용
- 64비트 CPU → 64비트 워드 사용
✅ 워드 크기의 종류
용어크기
하프 워드 | 워드의 절반 (예: 16비트) |
풀 워드 | CPU 기본 워드 크기 (예: 32비트) |
더블 워드 | 워드의 2배 크기 (예: 64비트) |
CPU의 워드 크기가 크면 한 번에 더 많은 데이터를 처리할 수 있음 → 연산 속도 증가
3. 숫자 표현 (이진법, 십육진법, 음수 표현)
✅ 3.1 이진법(Binary)
- 0과 1로만 숫자를 표현하는 방법
- 자리 올림 방식:십진수이진수
1 1 2 10 3 11 4 100 5 101
컴퓨터가 2진수를 사용하는 이유: 트랜지스터(전기 신호)가 ON/OFF (0과 1)만 표현 가능하기 때문.
✅ 3.2 음수 표현 (2의 보수법)
음수를 표현할 때는 2의 보수(Two's Complement) 방식을 사용함.
- 모든 비트를 반전(0 → 1, 1 → 0)
- 1을 더함
예제) 11(2) = 3(10)
- 2의 보수 구하기
scss복사편집11(2) → 반전(00) → +1 → 01(2) (음수)
- 다시 음수의 2의 보수를 구하면 원래 숫자로 돌아옴
CPU는 플래그 레지스터(Flag Register) 를 사용해 숫자가 양수/음수인지 구별함.
✅ 3.3 십육진법(Hexadecimal)
- 16진수는 0~9, A(10), B(11), C(12), D(13), E(14), F(15)까지 표현
- 16진수는 이진수 4자리와 1:1 매칭됨 → 변환이 쉬움
십진수이진수16진수
10 | 1010 | A |
15 | 1111 | F |
16 | 10000 | 10 |
32 | 100000 | 20 |
16진수 표기 0x15 (코드 표기) → 10진수로 21
(※ 기존 설명에서 틀렸던 부분: 0x15는 16진수로 21(10진수)이며, 15(10진수)는 0xF)
4. 컴퓨터에서 문자 표현 (인코딩, 문자집합)
✅ 4.1 문자는 어떻게 저장될까?
- 숫자와 문자는 저장되는 방식이 다름.
- 숫자 (95) → 정수형(4바이트)
- 문자 ('a') → ASCII (1바이트), 유니코드 (2~4바이트)
✅ 4.2 문자 인코딩 (Encoding)
인코딩(Encoding): 문자를 0과 1로 변환하는 과정
디코딩(Decoding): 0과 1을 문자로 변환하는 과정
문자ASCII (7비트)16진수
'A' | 01000001 | 0x41 |
'a' | 01100001 | 0x61 |
'0' | 00110000 | 0x30 |
컴퓨터는 문자와 숫자를 구별하는 "타입 정보(자료형)" 를 저장하여 구분함.
✅ 4.3 문자집합과 인코딩 방식
1️⃣ ASCII (7비트)
- 영어, 숫자, 특수 문자만 표현 (128개 문자)
- 한글, 중국어 불가능
2️⃣ EUC-KR (완성형 한글 인코딩)
- 2,350개 한글 표현 가능 (부족함, "쀏", "뙠" 표기 불가)
3️⃣ 유니코드 (Unicode)
- 전 세계 모든 문자 표현 가능 (한글, 이모지 포함)
- UTF-8, UTF-16, UTF-32 방식 존재
한글은 초성/중성/종성 조합이 많아 EUC-KR(2,350자)로는 부족 → 유니코드(11,172자) 필요
✅ 4.4 유니코드 & UTF-8
인코딩 방식특징
UTF-8 | 가변 길이 (1~4바이트), 가장 많이 사용됨 |
UTF-16 | 2바이트 또는 4바이트, 일부 시스템에서 사용 |
UTF-32 | 4바이트 고정, 메모리 차지 많음 |
UTF-8이 가장 효율적 (영어는 1바이트, 한글은 3바이트)
✔ 비트(Bit) → 바이트(Byte) → 워드(Word) → 데이터 크기 단위
✔ 이진법, 16진법 사용 이유: 컴퓨터 연산과 변환이 쉬움
✔ 음수 표현: 2의 보수법 사용, 플래그 레지스터로 구별
✔ 문자와 숫자는 저장 방식 자체가 다름 → 자료형(Type)으로 구별
✔ EUC-KR은 한글 표현이 부족 → 유니코드(UTF-8)가 대세
정보 단위
비트(bit) : 0과 1을 표현하는 가장 작은 정보 단위
1비트로는 0과 1을 사용해서 2가지의 정보를 표현할 수 있다 예를 들어 꺼짐(0) 켜짐(1)
정보 단위
- n비트로 2의 n승 가지의 정보를 표현이 가능하다.
- 프로그램은 수 많은 비트로 이루어져 있다
<표>
1 바이트 -> 8 비트
1 킬로바이트 -> 1000 바이트
1 메가바이트 -> 1000 킬로바이트
1 기가바이트 -> 1000메가바이트
1 테라바이트 -> 1000기가바이트
워드(word)
CPU가 한 번에 처리할 수 있는 정보의 크기 단위 예를들어 CPU가 처리할 수 있는 단위가 32 비트라면 워드가 32 비트가 되는것
하프 워드: 워드의 절반 크기
풀 워드 : 워드 크기
더블 워드 : 워드의 두배 크기
이진법 : 0과 1로 숫자를 표현하는 것
십진수 이진수
1 1
2 10
3 11
4 100
5 101
이런식으로 1을 넘어가는 시점에 자리 올림을 해 0과 1만으로 모든 수를 표현하는 방법
음수를 표현하는 방법?
2의 보수법이 있는데 쉽게 설명하면 모든 0과 1을 뒤집고 1을 더한 값과 같음
11(2)을 음수(2의 보수)로 표현하면 11 모든 0과 1을 뒤집음 -> 00 -> 1더하기-> 01
11(2)을 음수로 표현하면 01(2)가 됨
이게 진짜 음수가 맞을까? 싶다면 음수를 두번 구해보면 된다.
--a느 +a 인 것과 같이 01(2)를 다시 음수로 바꾸면 10(2)고 1을 더하면 11(2)가 된다.
근데 그러면 이게 양수인지 음수인지 컴퓨터가 구별을 어떻게 해요?
CPU에는 플래그 레지스터가 있음 그래서 양수인지 음수인지 표시가 되어있기에 확인이 가능하다.
그냥 쉽게 양수인지 음수인지 깃발을 들고 있다고 생각하자.
16 진법
이진법으로는 숫자의 길이가 너무 길어짐
- 십진수 32 == 이진수 100000
그래서 컴퓨터의 데이터를 표현할 때 십육진법도 많이 사용
- 수가 15를 넘ㄴ어가는 시점에 자리를 올린다.
십진수 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
십육진법 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11
A B C D E F 가 10부터 15까지 간다고 의미하면 된다
십육진법의 10도 십진수 10과 구별할 수 있는 방법이 없음 그래서 16진법을 표현할 수 있는 방법도 등장했는데
십육진수 15 표기
15 (16) <- 수학적 표기 방식
0x15 <- 코드상 표기 방식
그러면 왜 십육진수를 사용할까 ? 십진수를 안쓰고?
십육진수를 이진수로 변환하거나 이진수를 십윤진수로 변환하는 것이 굉장히 간단하다고 함
만약에 16진수로 1A2B(16) 라는 값이 있다고 가정할 때
1 -> 0001(2), A -> 1010(2), 2 -> 0010(2), B -> 1011(2) 로 표현되는데 각각 2진수로 변환한 것을 합치면 바로 2진수 표현이 됨
0001101000101011(2)
16진수도 마찬가지로 2진수의 값 4개를 16진수로 바꾸어 합쳐주면 됨
그러면 0과 1밖에 모르는 컴퓨터가 어떻게 문자를 이해하고 표현할 수 있을까?
문자 집합과 인코딩
문자 집합 (character set)
- 컴퓨터가 이해할 수 있는 문자의 모음
인코딩 (encoding)
- 코드화하는 과정
- 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정
디코딩 (decoding)
- 코드를 해석하는 과정
- 0과 1로 표현된 문자 코드로 문자로 변환하는 과정
- 우리가 이해할 수 있는 언어로 바꾸어주는 것
문자와 숫자는 애초에 저장되는 방식이 다르고 숫자 (32bit) 문자 (8bit) 데이터 타입도 다름
아스키 코드
- 초창기 문자 집합 중 하나
- 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자
- 7비트로 하나의 문자를 표현 (8비트 중 1비트는 오류 검출을 위해 사용되는 패리티 비트)
아스키코드는 간단한 인코딩은 가능하지만 한글을 포함한 다른 언어, 문자, 다양한 특수 문자를 표현하기는 어려움
아스키 코드는 7비트로 하나의 문자를 표현하기에 128개보다 많은 문자를 표현할 수 없음
확장된 아스키코드가 있다고해도 여전히 부족하다.
한글을 인코딩하는 대표적인 예시 두가지에는 조합형 방식과 완성형 방식이 있음
EUC-KR -> 한국 인코딩 방식
- 2300여개의 한글 표현 가능
- 그래도 여전히 한글 표기에는 부족한 숫자임
- 쀏, 뙠, 휔 같은 한글은 표기 불가
하지만 언어별로 인코딩을하면 다국어를 지원하는 프로그램을 개발할 떄엔 언어별 인코딩 방식을 모두 이해해야함
그래서 모든 언어를 해석할 수 있는 문자 집합과 인코딩 방식이 바로 유니코드 문자집합과 utf-8임
유니코드
- 통일된 문자 집합
- 한글, 영어, 화살표와 같은 특수 문자, 심지어 이모티콘도 마찬가지
- 현대 문자 표현에 있어 매우 중요한 위치임
유니코드의 인코딩 방식
- utf-8, utf-16, utf-32
'컴퓨터 구조' 카테고리의 다른 글
3/5 출근 전 공부하는 컴퓨터 구조, 명령어 사이클과 인터럽트 (0) | 2025.03.06 |
---|---|
[2/20 출근 전 공부하는 컴퓨터 구조] C 언어 컴파일 과정 + CPU (0) | 2025.02.20 |
[2/17 비전공자가 공부하는 컴퓨터 구조 공부 기록 남기기] 명령어 구조 야근좀 제발 그만!!!!!!! (0) | 2025.02.17 |
[컴퓨터 구조] 첫번째 공부 (0) | 2024.11.21 |