이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.
문자 집합과 인코딩
문자 집합(character set)
- 컴퓨터가 이해할 수 있는 문자의 모음
인코딩 (encoding)
- 코드화하는 과정
- 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정
디코딩(decoding)
- 코드를 해석하는 과정
- 0과 1로 표현된 문자 코드를 문자로 변환하는 과정
아스키 코드
아스키 코드란?
- 초창기 문자 집합 중 하나
- 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자
- 7비트로 하나의 문자 표현(8비트 중 1비트는 오류 검출을 위해 사용되는 패리티 비트)
- 아스키 코드는 7bit를 표현할 수 있으므로 2⁷인 128개의 문자를 표현할 수 있다.
- 인코딩이 간단
- 한글을 포함한 다른 언어 문자, 다양한 특수 문자를 표현 불가
패리티 비트(parity bit)
8비트 구조에서 패리티 비트는 7비트 크기의 아스키 코드를 제외한 나머지 1비트다.
패리티 비트는 전송 과정에서 1비트 오류를 검출하기 위해, 패리티 비트를 포함해 1의 개수가 짝수나 홀수개가 되도록 한다.
짝수 패리티 방식은 1의 개수를 짝수로 만드는 것이다. 만약 1의 개수가 짝수가 아니면 오류가 발생한 것이다.
홀수 패리티 방식은 1의 개수를 홀수로 만드는 것이다. 만약 1의 개수가 홀수가 아니면 오류가 발생한 것이다.
아스키 코드는 0 ~ 127까지 총 128개의 숫자 중 하나의 문자를 일대일로 대응시킨 것이다.
예를 들어, 알파벳 A는 십진수 65로 변환되고 65를 이진수로 변환하여 1000001로 인코딩 된다.
코드 포인트
문자 인코딩에서 글자에 부여된 고유한 값을 코드 포인트라고 한다.
문자 A의 코드 포인트는 65이다.
아래는 아스키 코드표이다.
한글 인코딩(완성형과 조합형)
한글 인코딩에는 두 가지 방식이 있다.
- 완성형 인코딩 : 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 방식
- 조합형 인코딩 : 초성을 위한 비트열, 중성을 위한 비트열, 종성을 위한 비트열을 할당하여 그것들의 조합으로 하나의 글자 코드를 완성하는 인코딩 방식
EUC- KR
- 완성형 인코딩 방식
- 초성, 중성, 종성이 모두 결합된 한글 단어에 2바이트 크기의 코드를 부여
- 2바이트 == 16비트 == 4자리 16진수로 표현
- 2,350개 정도의 한글 단어를 표현 가능
- 쀍, 쀓, 믜 등 모든 한글을 표현할 수 없음
- 언어별 인코딩 방식을 따로 제공
'가'는 위 표에 의하여 16진수인 b0a1로 변환되고 다시 2진수인 1011000010100001로 변환된다.
유니코드와 UTF-8
유니코드
- 통일된 문자 집합
- 한글, 영어, 화살표와 같은 특수 문자, 이모티콘 등등 다양한 문자 지원
- UTF-8, UTF-16, UTF-32 등 여러 인코딩 방식이 있다.
- UTF-8 방식이 가장 대중적이다.
UTF-8
- 가변 길이 인코딩 : 인코딩 결과가 1바이트 ~ 4바이트
- 인코딩 결과가 몇 바이트가 될지는 유니코드에 부여된 값에 따라 다름
- 유니코드 문자에 부여된 값의 범위가 0부터 007F(16진수)까지는 1바이트로 표현
- 유니코드 문자에 부여된 값의 범위가 0080(16진수)부터 00FF(16진수)까지는 2바이트로 표현
- 유니코드 문자에 부여된 값의 범위가 0800(16진수)부터 FFFF(16진수)까지는 3바이트로 표현
- 유니코드 문자에 부여된 값의 범위가 10000(16진수)부터 10FFFF(16진수)까지는 4바이트로 표현
한글에서 '한'은 D55C, '글'은 AE00 이므로 모두 0800과 FFFF사이에 있으므로 '한'과 '글'은 UTF-8로 인코딩하면 3바이트로 표현된다.
D55C는 2진수로 1101 0101 0101 1100, AE00은 1010 1110 0000 0000 이다.
위의 이진수를 이 표에 대입하면
한 : 11101101 10010101 10011100
글 : 11101010 10111000 10000000
'컴퓨터 구조 & 운영체제 > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] ALU와 제어장치 (0) | 2023.03.13 |
---|---|
[컴퓨터 구조] 명령어의 구조와 주소 지정 방식 (0) | 2023.03.11 |
[컴퓨터 구조] 고급 언어와 저급언어, 컴파일과 인터프리터 (0) | 2023.03.09 |
[컴퓨터 구조] 0과 1로 숫자를 표현하는 방법 (0) | 2023.03.04 |
[컴퓨터 구조] 대략적인 컴퓨터 구조 (0) | 2023.03.01 |