본문 바로가기

CS

[CS] 정보 단위, 인코딩

목차

  • 정보 단위
  • 컴퓨터가 숫자를 표현하는 방법
  • 컴퓨터가 문자를 표현하는 방법

 

정보 단위

컴퓨터는 0과 1밖에 이해 못한다.

그럼 어떻게 3 + 7 = 10 이라는 것을 알 수 있을까?

 

비트(bit): 0과 1을 표현하는 가장 작은 정보 단위

  • n 비트로 2ⁿ 가지의 정보 표현 가능
  • 프로그램은 수많은 비트로 이루어져 있음
  • 다만, 평소 "이 파일은 8,920,120 비트야" 라고 표현하진 않음
  • 비트보다 더 큰 단위를 사용(바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트)

 

 

 

워드(word)

CPU가 한 번에 처리할 수 있는 정보의 크기 단위

  • 하프 워드(half word): 워드의 절반 크기
  • 풀 워드(full word): 워드 크기
  • 더블 워드(double word): 워드의 두 배 크기
  • CPU가 한 번에 처리할 수 있는 정보의 크기가 32비트라면 풀 워드(워드 크기)는 32이다.

 

 

이진법: 0과 1로 숫자 표현하기

  • 이진법(binary)
  • 0과 1로 수를 표현하는 방법
  • 숫자가 1을 넘어가는 시점에 자리올림
  • 우리가 일상적으로 사용하는 진법은 십진법(decimal)
  • 이진수 8를 표기할 때 0b1000으로 표기된다.

 

0과 1로 음수 표현하기: 2의 보수법

  • 어떤 수를 그보다 큰 2ⁿ 에서 뺀 값
  • 모든 0과 1을 뒤집고 1을 더한 값
  • 플래그(flag) 레지스터가 양수와 음수를 구분해줌

 

십육진법

  • 이진법으로는 숫자의 길이가 너무 길어진다.
    • (십진수 32 == 이진수 100000)
  • 그래서 컴퓨터의 데이터를 표현할 때 십육진법도 많이 사용
    • 수가 15가 넘어가는 시점에 자리올림!
    • 십육진수 15를 표기할 때 0X15 라고 표기된다.

 

쓰는 이유

  • 2진수와 16진수 간에 서로 변환이 쉬움

정리

  • 컴퓨터를 이해하는 언어인 이진수 뿐만 아니라 더 짧게 표현, 서로 변환이 쉬운 십육진수를 알아두자!

 

 

컴퓨터가 0과 1로 숫자를 읽는 것은 알았다!! 

"그럼 도대체 사람이 알아보는 문자는 어떻게 알고 있는 것일까?"

 

 

문자 집합과 인코딩

  • 문자 집합(character set)
    • 컴퓨터가 이해할 수 있는 문자의 모음
  • 인코딩(encoding)
    • 코드화하는 과정
    • 문자집합에 속한 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정
  • 디코딩(decoding)
    • 코드를 해석하는 과정
    • 0과 1로 표현된 문자 코드로 문자로 변환하는 과정

 

인코딩 방법

 

아스키 코드

  • 초창기 문자 집합 중 하나
  • 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자
  • 7비트로 하나의 문자 표현(2의 7승 = 총 127 + (1) 개의 문자 표현 가능)
  • 8비트 중 1비트는 오류 검출을 위해 사용되는 패리티 비트(parity biy)

예시

  • A는 65로 인코딩
  • a는 97로 인코딩

특징

  • 간단한 인코딩
  • 하지만 한글을 포함한 다른 언어 문자, 다양한 특수 문자 표현 불가
    • 아스키 코드는 7비트로 하나의 문자를 표현하기에
    • 128개보다 많은 문자를 표현할 수 없음
    • 8비트 확장 아스키(extended ASCII)의 등장, 여전히 부족

 

언어별 인코딩 방식 - 한글 인코딩

  • 한글을 위한 인코딩이 필요
  • 한글의 특징
  • 알파벳을 이어 쓰면 단어가 되는 영어
  • 초성, 중성, 종성의 조합으로 이루어진 한글
  • 완성형 인코딩 방식조합형 인코딩 방식이 존재

 

EUC-KR(완성형 인코딩 방식)

  • 글자 하나 하나에 2바이트 크기의 코드 부여
  • 2바이트 == 16비트 == 4자리 십육진수로 표현(4개씩 끊어 읽기 때문)
  • 2300 여 개의 한글 표현 가능
  • 여전히 모든 한글을 표현하기에는 부족한 수
  • 쀏, 뙠, 휔 같은 한글은 표현 불가능

 

"안녕"을 EUC -KR로 인코딩 해 보았다!

 

그 밖에도 다양한 문자 집합이 있었다.

 

 

모든 언어, 특수 문자 까지 통일된 문자 집합을 사용하면 어떨까?

통일된 문자 집합 & 인코딩 방식이 있다면 어떨까?

 

 

유니코드 문자 집합과 UTF-8

  • 유니코드
    • 통일된 문자 집합
    • 한글, 영어, 화살표 같은 특수 문자, 심지어 이모티콘 까지
    • 현대 문자 표현에 있어 매우 중요한 위치
    • 각각의 문자마다 16진수로 표현되어 있다.
    • 💑💑💑💑💑💑💑💑💑💑💑💑💑💑💑💑💑💑
  • 유니코드의 인코딩 방식
    • utf-8, utf-16, utf-32 ...

https://symbl.cc/en/collections/symbols-for-steam/

 

Symbols for Steam ‭☭ ☢ ⚑‬ ✂ Copy & 📋 Paste (◕‿◕) SYMBL

Looking for Symbols for Steam? 🌟 Check these out: ‭☭ ☢ ⚑ ☮ ☯‬ 🌟 Grab unique symbols for your username or status at (◕‿◕) SYMBL!

symbl.cc

 

utf-8 인코딩 방식에 대해 좀 더 알아보자!

  • UTF(Unicode Transformation Format) == 유니코드 인코딩 방법
  • 가변 길이 인코딩: 인코딩 결과가 1바이트 ~ 4바이트
  • 인코딩 결과가 몇 바이트가 될지는 유니코드에 부여된 값에 따라 다름

 

 

 

'CS' 카테고리의 다른 글

[CS] 메모리, 캐시 메모리  (0) 2024.05.23
[CS] CPU의 성능 향상 기법  (0) 2024.05.22
[CS] CPU의 작동 원리  (0) 2024.05.22
[CS] 명령어  (0) 2024.05.22
[CS] 컴퓨터 구조  (0) 2024.05.21