목차
앞선 포스팅에서는 컴퓨터가 이진법으로 정보를 표현하는 방법에 대해 알아 보았다.
이번에는 컴퓨터가 실제로 문자나 사진, 음악, 동영상 등의 다양한 정보를 처리하는 방식에 대해 알아 보자.
1. 문자의 표현
이진법(binary)를 통하여 컴퓨터로 문자를 표현할 수 있다.
예를 들어, Andy
라는 단어를 표현하고 싶으면 십진법으로 65
110
100
121
로 표현할 수 있다.
그 중 $A$는 이진법으로 $1000001_{(2)}$로 표현할 수 있다.
어떻게 이렇게 표현할까?
바로 아스키(ASCII)를 이용하면 이렇게 표현이 가능하다.
(1-1) 아스키/아스키 코드
미국 정보 교환 표준 부호(ASCII; American Standard Code for Information Interchange)
아스키는 7비트로 구성한 0번부터 127번까지의 부호이다.
엄밀히 말하면 용어에 이미 코드(Code)가 들어가 있어 한글로 '아스키'가 맞겠지만, 흔히 ‘아스키 코드’라 부른다.
명령어
터미널에서는 `man ascii` 명령어로 쉽게 확인할 수 있다.
`man`은 매뉴얼(manual)을 줄인 명령어로, 뒤따라오는 명령어(여기서는 ascii)에 대한 매뉴얼을 둘러볼 수 있다.
아래처럼 8진법(octal), 16진법(hexadecimal), 10진법(decimal) 세 가지로 확인할 수 있다.
한계점
이름에서도 알 수 있듯이, ‘미국’의 관점에서 오직 ‘영어’로만 표현이 가능하다.
더 확장하고 싶어도 7비트의 한계 때문에 127번 이상의 문자를 표현할 수 없다.
(1-2) 유니코드(Unicode)
아스키의 단점을 보완하여 한글과 같은 다른 여러 나라의 문자나 이모티콘을 표현하기 위해 나온 것이 바로 유니코드이다. 여러 인코딩 방식이 있지만 'UTF(Unicode Transformation Format) 인코딩'을 사용하며 끝에 몇 비트로 표현하는지 구분한다.
- UTF-8
- UTF-16
- UTF-32
이 중에서도 아스키와 호환 가능하면서 글자의 크기가 가장 가벼운 UTF-8
을 많이 사용한다. UTF-8은 코드 포인트의 범위에 따라 인코딩 방식이 다르다. 코드 포인트는 그 값에 따라 1~4자리 바이트로 표현된다. xxx
이런 식으로 표현되는 것이 코드 포인트의 비트로 대체된다.
코드 포인트와 UTF-8의 변환 방식
첫 코드 포인트 | 마지막 코드 포인트 | 바이트 1 | 바이트 2 | 바이트 3 | 바이트 4 | 코드 포인트 |
U+0000 | U+007F | 0xxxxxxx | - | - | - | 128 |
U+0080 | U+07FF | 110xxxxx | 10xxxxxx | - | - | 1920 |
U+0800 | U+FFFF | 1110xxxx | 10xxxxxx | 10xxxxxx | - | 61440 |
U+10000 | U+10FFFF | 11110xxx | 10xxxxxx | 10xxxxxx | 10xxxxxx | 1048576 |
예시
위의 변환 방식 테이블에 x로 된 부분에 코드 포인트가 맞춰져 들어가는 것을 알 수 있다.
문자 | 코드 포인트 | 코드 포인트 (binary) | UTF-8 (binary) |
A | U+0041 | 010 0001 | 00100001 |
£ | U+00A3 | 000 1010 0011 | 11000010 10100011 |
한 | U+D55C | 1101 0101 0101 1100 | 11101101 10010101 10011100 |
😂 | U+1F602 | 0 0001 1111 0110 0000 0010 | 11110000 10011111 10011000 10000010 |
2. 색상의 표현
(2-1) RGB
색상 또한 숫자로 표현할 수 있다. 빨간색과 초록색, 파란색의 비율을 숫자로 표현한 것이 RGB(Red, Green, Blue)
이다. 그림이나 영상의 편집 도구를 사용할 때 나오는 색상코드가 바로 숫자로 색상을 표현한 것이다.
(2-2) 예시
실제로 필자가 꾸민 블로그의 코드블럭의 CSS 코드 일부를 가져왔다. background-color: rgb(247, 246, 243);
부분이 코드블럭의 배경색을 담당하는데, 숫자로 이루어져 있다!
.entry-content pre code.hljs {
background-color: rgb(247, 246, 243);
}
색상을 활용하여 이미지와 영상 모두 숫자로 표현되어 있으며 이외에도 음정 또한 숫자로 표현할 수 있다.
참고 자료
한글 인코딩과 유니코드
유니코드와 Java
수정일 2024-01-02
'CS 기초 > CS50 2019' 카테고리의 다른 글
[CS50 2019] (C언어) 문자열 (0) | 2023.05.27 |
---|---|
[CS50 2019] (C언어) C 기초 (0) | 2023.05.27 |
[CS50 2019] (컴퓨팅 사고) 알고리즘 (0) | 2023.04.06 |
[CS50 2019] (컴퓨팅 사고) 이진법 (0) | 2023.03.26 |
[CS50 2019] 모두를 위한 컴퓨터 과학 OT (0) | 2023.03.25 |
댓글