즐코

bit 와 byte / ASCII, Unicode / Text encording ?! 본문

CS

bit 와 byte / ASCII, Unicode / Text encording ?!

YJLEE_KR 2021. 12. 31. 01:27

1/ bit와 byte

2/ ASCII, Unicode

3/ Text encording (UTF-8 ?!)

 

 

컴퓨터는 0과 1밖에 모른다. 

즉 0과 1로 이루어진 데이터/정보들의 조합만 처리 가능하다. (신호가 있고 1 없고 0 => CPU가 처리)

그래서 CPU가 높을수록 많은 데이터 처리가 가능하다!! 

 

1/ bit와 byte

Bit = Binary digit

컴퓨터는 0,1 두 종류 중 하나만 담을 수 있는 bit라는 가장 최소의 단위를 가진다. 

 

1 bit = 0 / 1= 2가지 정보를 담을 수 있다. (boolean : true or false)

2 bits = 00 / 01 / 10 / 11 = 4가지 정보를 담을 수 있다.

4 bits = 0000 / 0001 / ~ / 1110 / 1111 = 2^4 = 16가지 정보를 담을 수 있다 (4 bit = 1 nibble)

8 bits = 2^8 = 256가지의 다른 정보를 담을 수 있다 (8 bit = 1 byte)

컴퓨터 프로그래밍에서는 이 1byte를 가장 기본 단위로 잡고 본다.

쉽게 기본적으로 숫자로 따지면 0~255 까지의 숫자를 나타낼수가 있다.

 

오랜만에 수학공부(?) 좀 했다. 이렇게 십진수를 이진수로 바꿀 수 있다. 

(10진수의 숫자를 2로 나눠지지 않을 때까지 나눠주고 여기서 발생한 나머지를 연결해주면 이진수 탄생!) 

 

 

2/ ASCII, Unicode

 

그렇다면, 문자는 과연 어떻게 변환할까?

 

이 때 나오는 게 ASCII code다. 풀어쓰면 미국 정보 교환용 표준 부호라고 한다. 

American Standard Code for International Interchange

즉, 사람들끼리 (물론 영어권사람들끼리ㅋ) 미리 약속해서 알파벳을 컴퓨터가 이해할 수 있는 이진수로 만들어 놓은 문자열 표, 규격과 같은 것이다. 이 문자열 표를 기반으로 알파벳, 즉 문자를 컴퓨터 기계어로 변환을 해준다. 

 

근데 세상엔 영어만 있는게 아니다. 수천만개의 다양한 언어가 존재한다. 

 

그래서 나온게, 바로 Unicode다.

이 유니코드에 들어간 문자열은 1byte에 다 담을수가 없어서 2 byte부터 그 이상의 byte를 이용해서 전체적인 문자열을 나타낸다. 언어뿐만 아니라 온갖 특수문자들도 표현 가능하다. 

번외지만, 알파벳과 한글을 메모장에 써보면 한글이 좀 더 뒤로 밀린다. 왜냐면 2byte부터 시작하기 때문

 

 

 

근데, 여기서 근본적으로 왜 bit와 byte를 이해하는게 중요한가?

 

프로그래밍 시 변수를 선언할 때 어떤 데이터 타입이냐에 따라서 메모리에 얼마나 크게 공간이 확보되는지가 정해진다.

 

메모리가 넉넉하지 못한 환경에서 동작하는 프로그램의 경우,

이런 데이터 타입을 알맞게 선택해서 효율적으로 작성하는게 중요하다고 한다.

예를 들어 알파벳이나 1, 2처럼 1 byte 정도를 담을 거면서 2바이트나 그 이상의 바이트 타입의 변수를 사용하면 메모리 낭비니까? (혼자 살건데 4룸에서 사는 느낌) 

 

맞는진 모르겠지만!!

오늘 수업에서 자바스크립트를 처음 배웠는데 변수를 선언할 때 왜 데이터 타입에 대해서 배웠는지 알 것 같다..

 

3/ Text encording (UTF-8 ?!)

Text Encoding

현존하는 많은 문자열을 어떻게 이진수 형태로 나타낼건지 그 규격을 약속하는 것

 

옛날에는 언어/나라마다 다양한 텍스트 인코딩이 존재했는데, 서로 다른 규격 때문에 웹사이트 깨지는 문제 발생

-> 이걸 해결하기 위해서 나온게 UTF-8 이라고 한다.

 

UTF-8 : Unicode Transformation For mat(8 bit) 의 약자

맨날 인터넷 하다보면 가끔 UTF-8이란걸 본적이 있었는데, 인코딩 방법이었구나 

이는 가변길이 유니코드 인코딩 방식 / 길이가 정해져 있지 않고 필요에 의해 길어질 수 있음을 나타낸다.

모든 ASCII 코드는 7bit로 나타낼 수 있기 때문에 UTF-8 에선 모두 1byte로 표현이 가능하며

유니코드의 경우는 최소 2byte에서 4byte까지 표현이 가능하다. 

 

즉, UTF-8에선 1byte로 표현가능하면 그대로 데이터를 표현하고, 

만약 2byte 이상이 필요하면 첫번째 덩어리에서 10을 붙여주고 두번째 덩어리에서 110을 붙여주면서 총 문자를 나타내는데 몇 byte가 필요한지 힌트를 줄수있다고 한다. (문자를 숫자로 인코딩해준걸 다시 인코딩하는건가?) 

 

UTF-16은 이에 비해 가변길이인건 맞지만 기본적으로 2byte를 사용하고 있기 때문에 아스키처럼 1byte로 충분히 표현이 가능함에도 2byte를 소모하게 된다. 그래서 UTF-8이 더 통상적으로 많이 이용된다고 한다. 

Comments