-
[IT 기초] 데이터 크기 단위(bit, byte, ..) / 데이터 표현 방법(아스키코드, 유니코드 / 인코딩 방식 UTF-8 / 2진수, 8진수, 16진수)IT/IT 기초(IT기사, 알고리즘, Linux 등) 2019. 11. 6. 14:48
우리가 방의 크기를 26평이라고 표현하듯,
컴퓨터에서 데이터 크기를 표현하는 단위가 존재한다.
이는 아래 표와 같다.
8 bits 1 BYTE 1024 bytes 1 KB 1024 KB 1 MB 1024 MB 1 GB 1024 GB 1 TB 1024 TB 1 PB 비트는 데이터를 나타내는 최소 단위이다.
컴퓨터는 모든 데이터를 0과 1의 조합으로 구성하여 저장한다. 이 0 또는 1이 하나의 비트가 된다.
1개의 비트는 0 또는 1의 두 가지 상태를 나타낼 수 있으므로, n개의 비트로는 2ⁿ가지의 상태를 나타낼 수 있다.
예로, 2비트로는 00, 01, 10, 11 4가지 상태를 나타낼 수 있다.
위에 나와있듯 8비트가 모이면 1바이트가 된다.
컴퓨터 메모리에서 1바이트 당 하나의 주소값이 할당된다.
1바이트에는 하나의 영문자, 숫자, 기호, 공백을 담을 수 있다.
컴퓨터는 원래 ABC abc 123 !@#$% 이런 영문과 숫자, 기호만을 표현하는데, 한글이나 한자 등의 문자는 바이트 2개나 그 이상의 개수로 늘려서 표현한다.
이러한 문자, 숫자, 기호를 컴퓨터가 이해할 수 있는 0과 1의 조합으로 나타내려면 일정한 규칙이 필요하다.
그것을 정의해놓은 것이 바로 아스키코드와 유니코드이다.
아스키코드는 1BYTE를 이용하여 데이터를 표현하는데,
에러를 탐지하는 패리티 비트를 제외하고 총 7자리를 사용하여 2^7개인 128개의 문자를 표현한다.
하지만 아스키코드는 다양한 언어를 컴퓨터 속 데이터로 표현하기엔 문제가 있었다. 이런 한계를 극복하기 위해, 거의 모든 언어를 표현할 수 있는 유니코드가 탄생한다. 유니코드는 2바이트+a를 사용하여 2^16+a 개수만큼 표현할 수 있다. U+ 라는 접두어가 붙어있으면 유니코드 라는 의미이다. 아스키코드의 0x41은 대문자 A이고, 이를 유니코드표에서 찾으면 U+0041이 된다.
여기서 잠깐, 10진수, 2진수, 8진수, 16진수로 데이터를 표현하는 방법은?
10진수
2진수
8진수
16진수
0~9 사용 0, 1 사용 0~7 사용 0~9, a, b, c, d, e, f 사용 앞에 0 붙여서 구분 앞에 0x 붙여서 구분 2진수 3자리로 8진수 1자리 표현 2진수 4자리로 16진수 1자리 표현 2 0000 0010 02 0x2 8 0000 1000 010 0x8 10 0000 1010 012 0xa 컴퓨터에서 2진수를 사용하게 된 계기는 무엇일까? 컴퓨터의 논리회로가 전기 신호가 있는 상태를 1, 없는 상태를 0으로 인식하기 때문이다. 즉, 컴퓨터는 1(turn on), 0(turn off) 두가지 상태를 인식한다.
그렇다면, 8진수와 16진수를 사용하는 이유는? 2진수로만 데이터를 표현하면 너무 길어지기 때문이다. 위의 표에 적혀 있듯이 2진수 3자리는 8진수 1자리로 대체할 수 있고, 2진수 4자리는 16진수 1자리로 대체할 수 있다. 한가지 예로, 색상을 표현할 땐 16진수를 사용한다. rgb 컬러 코드(#ff00ff).
#ff00ff을 2진수로 변환한다면.. 111111110000000011111111 ㅎㅎ이제 아스키코드와 유니코드를 이해했으니, 마지막으로 인코딩 방식 중 가장 많이 사용하는 UTF-8을 알아보도록 하겠다.
프로그래밍 언어는 영어로 이루어져 있다.
영어는 1바이트의 언어이고, 한글은 2바이트의 언어이다.
한글을 그대로 입력하면, 브라우저에서 한글이 깨져서 보이는 것을 처리해야 한다.
이런 문제가 발생하지 않도록 인코딩을 설정해 두는 것이 좋다.
utf-8은 모든 언어를 처리할 수 있기에 euc-kr보다 utf-8선호된다.
UTF-8, UTF-16, UTF-32같은 인코딩 방식은 유니코드표의 코드들을 어떻게 표현하느냐에 따라 달려있다.
UTF-8은 가변바이트를 사용하기 때문에, 1바이트로 표현이 충분한 A같은 경우는 0x41로 표현
UTF-16은 16비트 즉, 2바이트로 표현하기 때문에, 0x0041로 표현
UTF-32은 32비트 즉, 4바이트로 표현하기 때문에 0x00000041로 표현한다.
UTF-8의 표현 방식이 효율적이기에, 세계적으로도 UTF-8표준으로 많이 쓰이는 추세이다.
참고
이곳은 개인 공부용 블로그입니다. 틀린 부분이 있다면, 지적 부탁드립니다. 감사합니다 :^)
'IT > IT 기초(IT기사, 알고리즘, Linux 등)' 카테고리의 다른 글
[Linux] 포트상태확인(netstat, nc, ss) / 프로세스확인(ps) / pid로port찾기(lsof) (0) 2019.11.26 [Linux] 텍스트 편집기 vi / 파일 내용 읽기 cat, more, less, head, tail (0) 2019.11.22 [IT 기초] 윈도우 10 고정 IP 설정, 원격 데스크톱 가능하게 설정 (1) 2019.11.20 [Linux] 리눅스에서 파일 찾기, 파일 속 문자열 찾기 (0) 2019.11.19 [IT 기초] 인터넷 속도 단위(Mbps / MB) (0) 2019.11.15