Book/혼자 공부하는 컴퓨터구조+운영체제

Chapter2. 데이터

DongHo 2023. 12. 21. 23:59

[2-1] 0과 1로 숫자를 표현하는 방법

정보 단위

먼저, 컴퓨터는 0또는 1밖에 이해하지 못합니다. 따라서 0과 1을 나타내는 가장 작은 정보 단위를 비트(Bit)라고 합니다. 

  • n비트로 2^n가지의 정보 표현 가능합니다.
  • 프로그램은 수많은 비트로 이루어져 있습니다.
  • 비트보다 더 큰 단위를 사용합니다.
    • 바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트 ...

 

  • 워드(Word)
    • CPU가 한 번에 처리할 수 있는 정보의 크기 단위
    • 하프 워드(Half Word) : 워드의 절반 크기
    • 풀 워드(Full Word) : 워드 크기
    • 더블 워드(Double Word) : 워드의 두 배 크기

 

이진법

이진법은 1을 넘어가는 시점에 자리 올림을 하여 0과 1만으로 모든 수를 표현하는 방법입니다.

  • 0과 1로 수를 표현하는 방법
  • 숫자가 1을 넘어가는 시점에 자리올림
  • 우리가 일상적으로 사용하는 진법은 숫자가 9를 넘어갈 때 자리올림하는 십진법(Decimal)

 

이진수의 음수 표현

2의 보수(Two's complement) : 0과 1만으로 음수를 표현하는 방법 중 가장 널리 사용되는 방법
사전적 의미 : 어떤 수를 그보다 큰 2^n에서 뺀 값

  1. 모든 0과 1을 뒤집고 (1의 보수)
  2. 거기에 1을 더한 값

 

이진수를 보고 음수인지 양수인지 구분하는 법?

이를 해결하기 위해, 플래그(Flag)를 사용합니다.
플래그(Flag) : 부가 정보

 

십육진법

방금 이진법을 보셨다시피, 이진법으로는 숫자의 길이가 너무 길어집니다.
이를 해결하기 위해 십육진법을 사용하게 됩니다.

 

왜 십진법을 사용하지 않고 십육진법을 사용하느냐?

이는 이진법과 십육진법은 서로 변환하기 쉽기 때문입니다.

 

십육진수를 이진수로 변환하기

 

이진수를 십육진수로 변환하기

 

 

[2-2] 0과 1로 문자를 표현하는 방법

문자 집합과 인코딩

  • 문자 집합(Character Set) : 컴퓨터가 이해할 수 있는 문자의 모음
  • 인코딩(Encoding) : 코드화하는 과정, 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정입니다.
  • 디코딩(Decoding) : 코드를 해석하는 과정, 0과 1로 표현된 문자 코드로 문자로 변환하는 과정입니다.

 

아스키 코드

  • 초창기 문자 집합 중 하나입니다.
  • 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자입니다.
  • 7비트로 하나의 문자를 표현합니다.
    8비트 중 1비트는 오류 검출을 위해 사용되는 패리티 비트(Parity Bit)입니다.

아스키 코드는 한글을 포함한 다른 언어 문자, 다양한 특수 문자 표현은 불가합니다.
그 이유로는 아스키 코드는 7비트로 하나의 문자를 표현하기에 128개보다 많은 문자를 표현할 수 없습니다. 그래서 8비트 확장 아스키(extended ASCII)가 등장하였지만, 여전히 부족합니다.

한글 인코딩 : 완성형 vs 조합형 인코딩

 

 

EUC-KR

  • KS X 1001 KS X 1003 문자집합 기반의 한글 인코딩 방식입니다.
  • 완성형 인코딩입니다.
  • 글자 하나 하나에 2바이트 크기의 코드를 부여합니다.
    2바이트 == 16비트 == 4자리 십육진수로 표현합니다.

이렇게 2300여개의 한글 표현이 가능하지만, 여전히 모든 한글을 표현하기에는 부족한 수 입니다.
ex) 쀏, 뙠, 휔 같은 한글은 표현 불가

또한, 언어별 인코딩을 국가마다 하게 된다면 다국어를 지원하는 프로그램을 개발할 때엔 언어별 인코딩 방식을 모두 이해해야 합니다.

 

유니코드와 UTF-8

위와 같은 문제를 해결하기 위해 유니코드 문자 집합이 생겨났습니다.

유니코드 : 통일된 문자 집합이며, 한글, 영어, 화살표와 같은 특수 문자, 심지어 이모티콘까지 사용할 수 있는 현대 인코딩 방식입니다.

UTF-8 인코딩 방식

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

한 : D55C (== 1101 0101 0101 1100)
글 : AE00 (== 1010 1110 0000 0000)

한 : 11101101 10010101 10011100
글 : 11101010 10111000 10000000

 

 

Reference
Book<혼자공부하는 컴퓨터구조+운영체제>
Image (https://www.youtube.com/watch?v=peg8c6Gn-zc), (https://www.youtube.com/watch?v=upoRINMqlrw)