안녕하세요. 오늘은 컴퓨터가 문자를 표현하는 방법에 대해 알아보겠습니다.
사람이 사용하는 문자를 컴퓨터는 0과 1의 조합으로 변환해서 인식합니다. 이런 과정을 인코딩이라고 부릅니다.
[문자 => 0,1] 로 변환 : 인코딩
[0,1 => 문자] 로 변환 : 디코딩
인코딩에는 다양한 방법이 있습니다.
1. 아스키코드(ASCII CODE)
아스키코드는 7비트로 이루어져있고 총 128개까지 표현이 가능합니다.
아스키 테이블입니다. 0~31번까지는 제어문자입니다. 예를들어 0번은 NULL이고 10번은 Line Feed입니다.
일반적으로 C언에어서 아스키코드 사용이 가능합니다. 아스키테이블을 보면 A는 65입니다
#include <stdio.h>
int main()
{
char c = 'A';
char c2 = 65;
printf("%d ,%d \n",c,c2);
printf("%c ,%c \n",c,c2);
if (c == c2)
printf("equal \n");
else
printf("not equal \n");
}
출력결과
65 ,65
A ,A
equal
-----------
변수 c와 c2에 'A'와 65를 저장했는데, 결과를 보면 같은걸 저장했다고 볼 수 있습니다. A는 65를 의미하기때문에 같습니다.
2. EUC-KR(KS X 1001, KS X 1003기반)
한글을 표현하는 인코딩 방식입니다. 2바이트를 조합해서 한글을 표현합니다.
테이블의 일부이고, 예를들어 '가'를 표현하려면 0xB0A1라고 표현합니다. 최대 2350 개의 한글을 표현할수있는데, 정의되지않는 웎,훾 등은 표현이 불가능합니다. 그래서 EUC-KR인코딩을 사용하는곳에서 가끔 한글이 깨진것을 볼 수 있습니다.
아래의 사이트에서 EUC-KR인코딩 및 UTF-8 테스트를 쉽게 할 수 있습니다.
https://dencode.com/
3. 유니코드
모든 나라의 언어를 통합한 인코딩 방식입니다. 저장할때 1~4byte크기로 저장합니다. 예를들어 영어는 1byte, 한글은 2byte로 저장하다보니 어느정도의 크기를 읽어야 하는지 모르기때문에 UTF-8, UTF16, UTF32등 다양한 인코딩 방법이 있습니다. (참고로 인터넷은 UTF-8을 많이 사용하고 윈도우프로그램은 UTF-16을 많이사용 합니다)
'원'을 UTF-8방식으로 표현해보겠습니다.
https://unicode.org/charts/
'원'은 0xC6D0입니다.
시작(0x) | 끝(0x) | 1byte | 2byte | 3byte | 4byte |
0000 | 007F | 0xxxxxxx | |||
0080 | 07FF | 110xxxxx | 10xxxxxx | ||
0800 | FFFF | 1110xxxx | 10xxxxxx | 10xxxxxx | |
1000 | 10FFFF | 11110xxx | 10xxxxxx | 10xxxxxx | 10xxxxxx |
0xC6D0은 0x0800~0xFFFF 범위에 들어가므로 3바이트입니다.
0xC6D0은 0b1100011011010000이고 차례대로 대입하면 됩니다.
그러므로 '원'을 UTF-8인코딩하면 11101100 10011011 10010000입니다.
'기타지식들 > 운영체제' 카테고리의 다른 글
운영체제-프로세스란? (0) | 2020.11.17 |
---|---|
비선점스케줄링 시간구하기 (0) | 2017.02.19 |
산술Shift연산 (0) | 2017.02.16 |