0과 1로 숫자를 표현하는 방법
정보 단위
비트(bit) : 0과 1을 표현하는 가장 작은 정보 단위
- n비트로 2n가지의 정보 표현 가능
- 프로그램은 수많은 비트로 이루어져 있음
- 다만, 평소 "이 파일은 8,920,120 비트야"라고 표현하진 않음
- 비트보다 더 큰 단위를 사용
- 바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트...
(이전 단위를 1024개씩 묶은 단위는 kiB, MiB, GiB 등으로 따로 존재한다.)
- 워드(word)
- CPU가 한 번에 처리할 수 있는 정보의 크기 단위
- 하프 워드(half word) : 워드의 절반 크기
- 풀 워드(full word) : 워드 크기
- 더블 워드(double word) : 워드의 두 배 크기
이진법: 0과 1로 숫자 표현하기
- 이진법(binary)
- 0과 1로 수를 표현하는 방법
- 숫자가 1을 넘어가는 시점에 자리올림
- 우리가 일상적으로 사용하는 진법은 숫자가 9를 넘어갈 때 자리올림하는 십진법(decimal)
0과 1로 음수 표현하기 : 2의 보수
어떤 수를 그보다 큰 2n에서 뺀 값
조금 더 쉽게 구하려면
모든 0과 1을 뒤집고 1을 더하면 된다.
음수 두 번 구해보기
그런데 -1011(2)를 표현하기 위한 0101(2)과 십진수 5를 표현하기 위한 0101(2)은 똑같이 생겼는데, 어떻게 구분할까?
플래그(flag)
십육 진법
- 이진법으로는 숫자의 길이가 너무 길어진다
- 십진수 32 == 이진수 100000
- 그래서 컴퓨터의 데이터를 표현할 때 십육 진법도 많이 사용
- 수가 15를 넘어가는 시점에 자리올림
직접 코드에 써넣는 사례도 많다.
이진수 -> 십육 진수 변환
십육 진수를 사용하는 이유는 이진수와의 변환이 쉽기 때문이다.
0과 1로 문자를 표현하는 방법
문자 집합과 인코딩
- 문자 집합(character set)
- 컴퓨터가 이해할 수 있는 문자의 모음
- 인코딩(encoding)
- 코드화하는 과정
- 문자 집합에 속한 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정
- 디코딩(decoding)
- 코드를 해석하는 과정
- 0과 1로 표현된 문자 코드로 문자로 변환하는 과정
아스키코드
- 초창기 문자 집합 중 하나
- 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자
- 7비트로 하나의 문자 표현 (128개 표현 가능)
- 8비트 중 1비트는 오류 검출을 위해 사용되는 패리티 비트(paraty bit)
- 간단한 인코딩
- 하지만 한글을 포함한 다른 언어 문자, 다양한 특수 문자 표현 불가
- 아스키코드는 7비트로 하나의 문자를 표현하기에 128개보다 많은 문자를 표현할 수 없음
- 8비트 확장 아스키(extended ASCII)의 등장, 여전히 부족
A는 65로 인코딩, a는 97로 인코딩 된다. (코드 포인트 : 문자에 부여된 값)
한글 인코딩 : 완성형 vs 조합형 인코딩
- 한글을 위한 인코딩이 필요
- 영어는 알파벳을 이어 쓰면 단어가 된다.
- 한글은 초성, 중성, 종성의 조합으로 이루어져 있다.
- 그래서 완성형 인코딩 방식과 조합형 인코딩 방식이 존재한다.
EUC-KR
- KS X 1001 KS X 1003 문자집합 기반의 한글 인코딩 방식
- 완성형 인코딩
- 글자 하나하나에 2바이트 크기의 코드 부여
- 2바이트 == 16비트==4자리 십육진수로 표현
DenCode | Encoder & Decoder Online Tools
Encoding and Decoding site. e.g. HTML Escape / URL Encoding / Base64 / MD5 / SHA-1 / CRC32 / and many other String, Number, DateTime, Color, Hash formats!
dencode.com
문제점
- 2300여 개의 한글 표현 가능
- 여전히 모든 한글을 표현하기에는 부족
- 쀏, 뙠, 휔 같은 한글은 표현 불가능
이렇게 언어별 인코딩을 국가마다 하게 되면 다국어를 지원하는 프로그램을 개발할 때엔 언어별 인코딩 방식을 모두 이해해야 한다.
통일된 문자 집합 & 인코딩 방식이 필요
유니코드 문자 집합과 utf-8
- 유니코드
- 통일된 문자 집합
- 한글, 영어, 화살표와 같은 특수 문자, 이모티콘도 가능
- 현재 문자 표현에 있어 매우 중요한 위치
- 유니코드 인코딩 방식
- utf-8. utf-16, utf-32 등
https://unicode-table.com/en/blocks/
Unicode®
Unicode web service for character search. Find, copy and paste your favorite characters: 😎 Emoji, ❤ Hearts, 💲 Currencies, → Arrows, ★ Stars and many others 🚩
symbl.cc
이 코드 포인트를 인코딩하는 방식에도 여러 가지가 있다.
utf-8
- UTF(Unicode Transformation Format) : 유니코드 인코딩 방법
- 가변 길이 인코딩 : 인코딩 결과가 1바이트 ~ 4바이트
- 인코딩 결과가 몇 바이트가 될지는 유니코드에 부여된 값에 따라 다름
X 표시에 값을 차례대로 넣으면 된다.
https://onlineutf8tools.com/convert-utf8-to-binary
Convert UTF8 to Binary Bits - Online UTF8 Tools
World's simplest online utility that converts UTF8 to binary. Free, quick, and powerful. Import UTF8 – get binary bits.
onlineutf8tools.com
'CS > 컴퓨터 구조' 카테고리의 다른 글
메모리와 캐시 메모리 (1) | 2023.05.20 |
---|---|
CPU의 성능 향상 기법 (0) | 2023.05.12 |
CPU의 작동 원리 (1) | 2023.05.08 |
소스 코드와 명령어 (0) | 2023.03.21 |
컴퓨터 구조 개요 (0) | 2023.03.15 |