컴퓨터가 0과 1로 숫자와 문자를 표현하는 방법
컴퓨터가 0과 1로 숫자를 표현하는 방법
컴퓨터는 0과 1로 숫자를 표현할 수 있다. 전기를 이용해 컴퓨터를 동작시키기 때문인데, 전기가 흐르면 1, 흐르지 않으면 0이 된다. 이 때문에 컴퓨터에서는 2진법을 사용한다. 한 개의 비트로는 2가지의 상태밖에 표현할 수 없다. 더 많은 숫자 (또는 상태)를 표현하기 위해서는 많은 스위치를 연결하면 된다.
위 그림에서 0000은 0, 1000은 8, 1100은 12, 1111은 15를 나타낸다.
정보 단위
- 비트(bit): 0과 1을 표현하는 가장 작은 단위
- n비트로 2^n가지의 정보 표현 가능
- 프로그램은 수 많은 비트로 이루어져 있다.
- 하지만 "이 파일은 9876543210비트야"라고 말하지는 않는다.
- 비트보다 더 큰 단위를 사용한다. (바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트 등)
1 바이트 | 8 비트(bit) |
1킬로바이트(kB) | 1000 바이트(byte) |
1 메가바이트(MB) | 1000 킬로바이트 |
1기가바이트(1GB) | 1000 메가바이트 |
1 테라바이트(1TB) | 1000 기가바이트 |
c.f) 1024개씩 묶은 단위는 KiB, MiB, GiB로 표기한다. 이러한 단위는 RAM (random access memory)의 용량이나 CPU (central processing unit)의 캐시 사이즈 등을 표현하기 위해 사용한다. 하드웨어 메모리 용량은 컴퓨터가 사용하는 2진법 체계와 직접적인 연관이 있기 때문에 정확한 사이즈를 명시해줘야 한다.
워드 (word)
- cpu가 한 번에 처리할 수 있는 정보 크기 단위
- 하프 워드 (워드 절반 크기)
- 풀 워드 (워드의 크기)
- 더블 워드 (워드 두 배 크기)
이진법 (binary)
- 0과 1로 수를 표현하는 방법
- 숫자가 1을 넘어가는 시점에 자리를 올린다
- 10(2) 또는 0b1010으로 표현한다
0과 1로 음수 표현하기 (2의 보수)
- 2의 보수란 어떤 수를 그보다 큰 2^n에서 뺀 값이다. 이를 쉽게 구하는 방법은 모든 0과 1을 뒤집고 1을 더하면 된다.
- -1011(2)를 표현하기 위한 0101(2)와 십진수 5를 표현하기 위한 0101(2)은 똑같이 생겼는데 어떻게 구분을 할까? → 겉모습만 봤을 때는 같지만, cpu 내부의 flag라는 레지스터에 양수 음수임을 저장해두기 때문에 헷갈릴 일은 없다고 할 수 있다.
16진법(hexa demical)
- 0~9는 0~9로, 10~15는 A~F로 표현한다.
- 15(16) 또는 0x0F로 표현한다.
- 2진법으로는 숫자의 길이가 너무 길어진다.
- 컴퓨터의 데이터를 표현할 때 16진법도 많이 사용한다.
- 2진수와 16진수 변환을 하기에 용이하기 때문에 많이 사용
- 2진수 → 16진수: 2진수를 4개씩 잘라서 16진수 1개로 표현할 수 있다.
- 16진수 → 2진수: 16진수 숫자 하나는 2진수 4개로 표현할 수 있다.
ex) 1A2B(16) => 0001101000101011(2)
ex) 11010101(2) => D5(16)
컴퓨터가 0과 1로 문자를 표현하는 방법
문자집합과 인코딩
문자 집합(character set)
- 컴퓨터가 이해할 수 있는 문자의 모음
인코딩
- 코드화하는 과정
- 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정
디코딩
- 문자 코드를 해석하는 과정
- 0과 1로 표현된 문자 코드가 문자로 변환되는 과정
아스키 코드
초창기 문자 집합 중 하나
알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자
7비트로 하나의 문자 표현 -> 128개의 문자를 표현 가능
- 8비트 중 1비트는 오류 검출을 위해 사용하는 패리티 비트(parity bit)
장점
- 간단한 인코딩
- A는 65로 인코딩된다
- a는 97로 인코딩된다.
단점
- 아스키 코드는 7비트로 하나의 문자를 표현하기 때문이다
- 128개보다 많은 문자를 표현할 수 없다
- 8비트 확장 아스키의 등장, 그러나 여전히 부족
한글 인코딩: 완성형 vs 조합형 인코딩
한글을 위한 인코딩이 필요
- 한글의 특징
- 알파벳을 이어쓰면 단어가 되는 영어
- 초성, 중성, 종성의 조합으로 이루어진 한글
- 완성형 인코딩 방식과 조합형 인코딩 방식이 존재
EUC-KR
- KS X 1001 KS X 1003 문자집합 기반의 한글 인코딩 방식
- 완성형 인코딩
- 글자 하나 하나에 2바이트 크기의 코드 부여
- 2바이트 == 16비트 == 4자리 16진수로 표현
- 2300여개의 한글 표현 가능
- 여전히 모든 한글을 표현하기에는 부족한 수
- 쀏, 뙠, 훽 같은 한글은 표현 불가
- 이렇게 언어별 인코딩을 국가마다 하게 되면 다국어를 지원하는 프로그램을 개발할 때엔 언어별 인코딩 방식을 모두 이해해야 한다.
- 모든 언어, 특수 문자까지 통일된 문자 집합을 사용하면 어떨까? 통인된 문자 집합 & 인코딩 방식이 있다면?
유니코드 문자 집합과 utf-8
유니코드
- 통일된 문자 집합
- 한글, 영어, 화살표와 같은 특수 문자, 심지어 이모티콘까지 표현 가능
- 현대 문자 표현에 있어 매우 중요한 위치
유니코드의 인코딩 방식
- utf-8, utf-16, utf-32
- 유니코드 코드 포인트 값을 어떻게 0과 1로 변환하는지에 따라 인코딩 방식이 바뀐다.
utf-8 인코딩
- UTF(Unicode Transformation Format) == 유니코드 인코딩 방법
- 가변 길이 인코딩: 인코딩 결과가 1바이트 ~ 4바이트
- 인코딩 결과가 몇 바이트가 될지는 유니코드에 부여된 값에 따라 다름
글자가 깨져요 - 인코딩이 호환되지 않거나 해당 문자가 문자 집합에 속하지 않는지 생각해볼 수 있다.
'컴퓨터 구조' 카테고리의 다른 글
[컴퓨터구조] 빠른 CPU를 위한 설계 (0) | 2024.03.15 |
---|---|
[컴퓨터구조] CPU (1) | 2024.03.14 |
[컴퓨터구조] 소스 코드와 명령어 (1) | 2024.03.08 |
[컴퓨터구조] 컴퓨터의 핵심 부품 4가지 (0) | 2024.03.06 |
[컴퓨터구조] 컴퓨터 구조를 배우는 이유 (0) | 2024.03.06 |