ewok 2023. 3. 20. 13:44

0과 1로 숫자를 표현하는 방법

정보 단위

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

1비트
좌:2비트 우:3비트

 

  • 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자리 십육진수로 표현

https://dencode.com/

 

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