문타쿠, 공부하다.
[혼공컴운] Chapter 02. 데이터 본문
02-1. 0과 1로 숫자를 표현하는 방법
"정보 단위"
- Bit
- 컴퓨터가 이해하는 가장 작은 정보 단위
- 0과 1을 나타내는 가장 작은 정보 단위
- n비트는 2ⁿ가지 정보를 표현할 수 있다.
- Byte
- 1Byte = 8Bit
- 2⁸(256)개의 정보를 표현
- KB
- 1KB = 1,000Byte
- MB
- 1MB = 1,000KB
- GB
- 1GB = 1,000MB
- TB
- 1TB = 1,000GB
- Word
- CPU가 한 번에 처리할 수 있는 데이터 크기
- 워드의 크기는 CPU마다 다르지만, 현대 컴퓨터의 워드 크기는 대부분 32비트 또는 64비트이다.
- 하프 워드: 워드의 절반 크기
- 풀 워드: 1배 크기
- 더블 워드: 2배 크기
"이진법"
- 이진법
- 숫자가 1을 넘어가는 시점에 자리 올림하여 0과 1만으로 모든 숫자를 표현하는 방법
- 이진수: 이진법으로 표현한 수
- 수학적 표기 방식: 아래첨자 ₍₂₎
- 코드상 표기 방식: 0b _ _ _ _
- 십진법
- 숫자가 9를 넘어가는 시점에 자리 올림하여 0~9까지 열 개의 숫자만으로 모든 수를 표현하는 방법
- 십진수: 십진법으로 표현한 수
우리는 일상적으로 십진수를 사용하지만, 0과 1밖에 모르는 컴퓨터에 어떤 숫자를 알려 주기 위해서는 십진수가 아닌 이진수를 사용해야 한다.
<이진수의 음수 표현>
컴퓨터는 0과 1만 이해할 수 있기 때문에 마이너스 부호를 사용하지 않고 0과 1만으로 음수를 표현해야 한다.
어떻게...?
ㄴ가장 널리 사용되는 방법으로는 '2의 보수'를 구해 이 값을 음수로 간주하는 방법이 있다.
2의 보수
- 사전적 의미는 '어떤 수를 그보다 큰 2ⁿ에서 뺀 값'
- 쉽게 표현하자면 '모든 0과 1을 뒤집고(1의 보수) 거기에 1을 더한 값(2의 보수)'
- 가장 널리 사용되는 방식이지만, 완벽한 방식은 아니다.
그렇다면 이진수만 보고 이것이 양수인지 음수인지 어떻게 구분하나요?
ㄴ컴퓨터 내부에서 어떤 수를 다룰 때는 이 수가 양수인지 음수인지를 구분하기 위해 '플래그'를 사용한다.
*플래그란?
ㄴ일종의 부가 정보
ㄴ컴퓨터 내부에서 어떤 값을 다룰 때 부가 정보가 필요한 경우 플래그를 사용한다.
"십육진법"
이진법은 0과 1만으로 모든 숫자를 표현하다 보니 숫자의 길이가 너무 길어진다는 단점이 있다.
그래서 데이터를 표현할 때 십육진법도 자주 사용하는데...
- 수가 15를 넘어가는 시점에 자리 올림을 하는 숫자 표현 방식
- 한 글자로 열여섯 종류(0~9, A~F)의 정보를 표현
- 십육진수: 십육진법으로 표현한 수
- 수학적 표기 방식: 아래첨자 ₍₁₆₎
- 코드상 표기 방식: 0x _ _
십진수 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | ... |
십육진수 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 10 | ... |
십육진법을 사용하는 주된 이유 중 하나는 이진수를 십육진수로, 십육진수를 이진수로 변환하기 쉽기 때문이다.
<십육진수를 이진수로 변환하기>
- 십육진수 한 글자를 4비트의 이진수로 간주하기
16진수 1A2B를 2진수로 변환하면?!
ㄴ1: 0001
ㄴA: 1010
ㄴ2: 0010
ㄴB: 1011
=> 1A2B₍₁₆₎ = 0001101000101011₍₂₎
<이진수를 십육진수로 변환하기>
- 이진수 숫자를 네 개씩 끊고, 끊어 준 네 개의 숫자를 하나의 십육진수로 변환한 뒤 그대로 이어 붙이기
2진수 11010101을 16진수로 변환하면?
ㄴ1101: D
ㄴ0101: 5
=> 11010101₍₂₎ = D5₍₁₆₎
02-2. 0과 1로 문자를 표현하는 방법
"문자 집합과 인코딩"
- 문자 집합
- 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
- 인코딩
- 코드화하는 과정
- 문자 집합에 속한 문자를 컴퓨터가 이해할 수 있는 0과 1로 변환하는 과정
- 디코딩
- 코드를 해석하는 과정
- 0과 1로 표현된 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정
"아스키 코드"
아스키란?
- 초창기 문자 집합 중 하나
- 알파벳과 아라비아 숫자 그리고 일부 특수 문자 및 제어 문자를 포함
- 아스키 문자는 7비트로 표현, 7비트로 표현할 수 있는 정보의 가짓수는 2⁷개, 총 128개의 문자를 표현할 수 있다.
- 실제로 하나의 아스키 문자를 나타내기 위해서는 8비트(1바이트)를 사용하는데, 8비트 중 1비트는 오류 검출을 위해 사용되는 '패리티 비트'이므로 실질적으로 문자를 표현하기 위해 사용되는 비트는 7비트이다.
아스키 코드
- 아스키 문자에 대응되는 고유한 수
- 아스키 코드는 매우 간단하게 인코딩 된다는 장점이 있지만, 한글을 포함한 아스키 문자 집합 외의 문자 및 특수문자를 표현할 수 없다는 단점이 있다.
- 더 다양한 문자 표현을 위해 아스키 코드에 1비트를 추가한 8비트의 확장 아스키가 등장했지만, 그럼에도 불구하고 표현 가능한 문자는 턱없이 부족하다.
"EUC-KR"
- 완성형 한글 인코딩 방식
- 한글 단어에 2바이트 크기의 코드를 부여
- 문자 집합에 정의되지 않은 글자는 EUC-KR로 표현할 수 없다.(모든 한글을 표현할 수 없음)
- EUC-KR의 확장 버전으로 CP949가 등장하긴 했지만 이마저도 한글 전체를 표현하기에 넉넉한 양은 아님
"유니코드와 UTF-8"
각 나라의 언어별로 인코딩을 한다면 다국어를 지원하는 프로그램을 만들 때 각 나라 언어의 인코딩을 모두 알아야하는 번거로움이 있다.
이때 만약 모든 나라 언어의 문자 집합과 인코딩 방식이 통일되어 있다면?
즉, 모든 언어를 아우르는 문자 집합과 통일된 표준 인코딩 방식이 있다면?
언어별로 인코딩하는 수고로움을 덜 수 있는데...
유니코드
- 여러 나라의 문자를 광범위하게 표현할 수 있는 통일된 문자 집합
- 현대 문자를 표현할 때 가장 많이 사용되는 표준 문자 집합
- 아스키 코드나 EUC-KR은 글자에 부여된 값을 그대로 인코딩 값으로 삼았는데, 유니코드는 글자에 부여된 값 자체를 인코딩 값으로 삼지 않고 UTF-8, UTF-16, UTF-32 등과 같은 다양한 방법으로 인코딩한다.
글자가 깨지는 현상을 발견한다면, 인코딩이 호환되지 않는 것인지, 문자 집합에 포함되지 않는 문자를 사용한 것은 아닌지 의심해 보자!
'컴퓨터 구조 > 혼자 공부하는 컴퓨터 구조+ 운영체제' 카테고리의 다른 글
[혼공컴운] Chapter 04. CPU의 작동 원리 (0) | 2023.08.24 |
---|---|
[혼공컴운] Chapter 03. 명령어 (0) | 2023.08.23 |
[혼공컴운] Chapter 01. 컴퓨터 구조 시작하기 (0) | 2023.08.03 |
[혼자 공부하는 컴퓨터 구조+운영체제] 2023.08.03 ~ 책 실종... (0) | 2023.08.03 |