[혼자 공부하는 컴퓨터구조 + 운영체제] Chap2. 데이터

이번 단원에서는 컴퓨터가 데이터를 다루는 방법에 대해서 배웠어요.

 

사람은 데이터를 그대로 보고 이해할 수 있지만,

컴퓨터는 우리처럼 그대로 이해하지 못합니다.

 

학교 다닐 때, 교수님께서 항상 하시던 말씀이 생각나네요..

 

컴퓨터는 바보다
by. 교수님

 

컴퓨터는 말 그대로 계산만 할 줄 아는 바보라서, 

사람인 우리가 무엇을 어떻게 원하는지

하나하나 상세히 입력해주어야 해요.

 

이 단원에서는 

컴퓨터가 이해할 수 있는 0과 1로

숫자와 문자를 어떻게 표현할 수 있는지에 대해 배웠습니다.

 

 

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

정보 단위

정보 단위란 무엇일까요?

말 그대로, 정보를 표현하는데 필요한 단위입니다.

 

우리가 컴퓨터에서 정보를 표현할 때, 0과 1로 표현하게 됩니다.

즉 이것이 가장 작은 단위인, 비트 bit가 되는 것!

 

  • 비트 bit - 0과 1을 나타내는 가장 작은 정보 단위
    • 1 비트는 0 또는 1, 두 가지 정보를 표현할 수 있음
    • n 비트는 2^n가지 정보를 표현할 수 있음한 칸에 2가지 정보를 표현할 수 있으니, 만약 3칸이 있다면 2*2*2 = 8가지 정보를 표현할 수 있겠죠?

 

더 큰 단위에 대해 배워봅시다.

우선 8개의 비트를 묶은 단위바이트 byte!

8개를 묶었으니 몇 가지 정보를 표현할 수 있을까요?

정답은...

2*2*2*2*2*2*2*2 = 256가지입니다!

 

  • 바이트 byte - 8개의 비트를 묶은 단위
    • 1 바이트 = 8 비트 = 2^8개의 정보를 표현할 수 있음

더 큰 단위들

더 큰 단위들은 익숙하게 생활 속에서 볼 수 있습니다.

 

 

또 다른 단위인 워드 word에 대해서도 배워보았는데요,

워드란 CPU가 한 번에 처리할 수 있는 데이터 크기를 말합니다.

 

Window를 쓰시는 분들은 이 단위를 보신 분도 계실 텐데,

어떤 프로그램을 다운받을 때

내 PC가 Window 32비트인지 64비트인지 확인하신 적 있으신가요?

바로 그녀석을 말합니다.

  • 워드 word - CPU가 한 번에 처리할 수 있는 데이터 크기
    • 하프 워드(1/2배), 풀 워드(1배), 더블 워드(2배)
    • 대부분 32비트, 64비트

 

 

이진법

개발자에게는 빼놓을 수 없는 개념이죠?

이진법입니다.

 

인간인 저희는 0부터 9까지의 10가지 숫자로 모든 수를 표현하는,

십진법을 사용하는데요

컴퓨터는 0과 1 밖에 모르는 바보이기 때문에

이진법을 사용해서 수를 표현해주어야 합니다.

 

이때, 십진법 100과 이진법 100(=십진수로 4)은 겉보기에 차이가 나지 않으므로

이진수 앞에는 0b를 붙여 구분합니다. (b는 binary)

 

  • 이진법: 0과 1만으로 모든 수를 표현하는 방법 → 이진수
    • 앞에 0b를 붙여 구분함
  • 십진법: 0부터 9까지, 10개의 숫자만으로 모든 수를 표현하는 방법 → 십진수
  • 이진수의 음수 표현
    • 2의 보수를 구해 이 값을 음수로 간주
    • 2의 보수: 모든 0과 1을 뒤집고, 1을 더한 값
    • 양수와 구분하기 위해 플래그를 사용

 

십육진법

굉장히 큰 수를 이진수로 표현해야 한다면

1101111010101010110100101.... 끝도 없이 늘어나겠죠

이때 십육진법을 사용하면 이진수로 변환하기도 쉽고,

큰 수도 적기 쉽습니다.

 

십육진법이란 0부터 9의 숫자, 그리고 십진수에서 표현되는 10~15는 A~F의 문자로 표현하는 방법입니다.

십육진수 앞에는 0x를 붙여 구분해요. (x는 hexadecimal)

 

  • 십진수 10~15를 A~F로 표현하는 방법
  • 앞에 0x를 붙여 구분함

 

십육진수를 이진수로 변환하려면 어떻게 해야할까요?

십육진수를 이루는 숫자 1개는 16가지 수 중 하나죠.

이진수를 이루는 숫자 1개는 2가지 수 중 하나입니다. 

이진수 하나에 1비트이므로, 2*2*2*2 = 16이니까

십육진수 하나에는 4비트가 필요합니다.

 

변환할 때는,

십육진수를 이루는 숫자 하나하나를 따로 이진수 4숫자로 변환하고 이어 붙이면 됩니다.

 

십육진수 → 이진수

 

반대도 똑같아요!

이진수 수를 네 개씩 끊어, 

각각을 하나의 십육진수로 변환하고 이어 붙이면 됩니다.

 

이진수 → 십육진수

 

 

  • 십육진수를 이진수로 변환하기
    • 십육진수를 이루는 숫자 하나를 이진수로 표현하려면 4비트가 필요함 (2^4 = 16)
    • 16진수 → 2진수: 십육진수를 이르고 있는 각 글자를 따로따로 (4개의 숫자로 구성된) 이진수로 변환하고 그대로 이어 붙이면 됨
  • 이진수를 십육진수로 변환하기
    • 이진수 숫자를 네 개씩 끊고, 각각을 하나의 십육진수로 변환한 뒤 그대로 이어 붙이면 됨

 

2. 0과 1로 문자를 표현하는 방법

숫자를 표현하는 법을 배웠으니

이제 문자를 표현하는 방법을 배울 차례네요.

 

문자를 표현하는 방법은 훨씬 까다롭습니다.

컴퓨터가 인식할 수 있는 문자 모음, 즉 0과 1로 이루어진 문자 코드로 변환해야 하는데요

문자를 문자 코드로 변환하는 것을 인코딩,

반대로 문자 코드를 문자로 변환하는 것을 디코딩이라고 합니다.

 

문자 집합과 인코딩

  • 0과 1로 문자를 표현하는 방법
  • 문자 집합: 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
  • 인코딩: 문자를 0과 1로 이루어진 문자 코드로 변환
  • 디코딩: 0과 1로 이루어진 문자 코드를 문자로 변환

 

아스키라는 문자 집합에 대해서 배워볼까요?

아스키 문자는 0부터 127까지, 총 128개의 숫자 중 하나의 고유한 수에 일대일로 대응됩니다.

항상 아스키 코드표를 보면서 코딩테스트 문제를 풀었었는데요...

하지만 한글을 표현할 수 없다는 단점이 있었습니다.

 

한글을 표현할 수 있는 대표적인 방법에 대해서도 배웠습니다.

우리나라말은 초성, 중성, 종성이 결합하여 소리를 내는 방식이다 보니

완성된 하나의 글자에 고유한 코드를 부여하는 완성형 인코딩 방식

초성, 중성, 종성에 해당하는 코드를 합하여 글자 코드를 만드는 조합형 인코딩 방식이 생겨났어요.

또, EUC-KR이라는 초성, 중성, 종성이 모두 결합된 한글 단어에 2바이트 크기의 코드 부여하는 방법도 배웠는데,

총 2,350개를 표현할 수 있지만

모든 한글 조합을 표현할 정도는 아니라고 합니다.

(한글의 위대함을 다시 한번 깨닫게 되네요...)

 

이러한 단점들을 보완하기 위해

훨씬 다양한 한글 및 대부분 나라의 문자와 특수문자까지 코드로 표현 가능한

유니코드라는 문자 집합이 탄생했습니다!

글자에 부여된 값 자체를 인코딩 된 값으로 삼지 않고,

그 값을 다양한 방법으로 (예를 들어 한글로 UTF-8) 인코딩하는 방법을 사용합니다.

 

 

아스키코드

  • 아스키: 초창기 문자 집합 중 하나
    • 아스키 문자들은 각각 7비트로 표현됨
  • 아스키코드: 아스키 문자에 대응된 고유한 수
  • 아스키 문자는 0~127 총 128개의 숫자 중 하나의 고유한 수에 일대일로 대응됨
  • 그러나 한글을 표현할 수 없다는 단점

EUC-KR

  • 완성형 인코딩 방식 - 초성, 중성, 종성의 조합으로 완성된 하나의 글자에 고유한 코드를 부여
  • 조합형 인코딩 방식 - 초성, 중성, 종성에 해당하는 코드를 합하여 하나의 글자 코드를 만듦
  • EUC-KR: 초성, 중성, 종성이 모두 결합된 한글 단어에 2바이트 크기의 코드 부여
    • 총 2,350개 정도의 한글 단어를 표현할 수 있음 - 모든 조합을 표현할 정도는 아님
    • CP949: EUC-KR의 확장된 버전

유니코드와 UTF-8

  • 모든 한글을 표현할 수 없다, 언어별 인코딩을 알아야 한다 등의 단점
  • 유니코드 문자 집합: 훨씬 다양한 한글, 대부분 나라의 문자, 특수문자, 이모티콘 등까지 코드로 표현 가능한 문자 집합
  • 글자에 부여된 값 자체를 인코딩 된 값으로 삼지 않고 이 값을 다양한 방법으로 인코딩한다
    • UTF-8 → 1~4바이트

 


혼자 공부하는 컴퓨터구조 + 운영체제를 읽고 배운 점을 정리합니다.

 

2023.09.01 - [CS/컴퓨터 구조] - [혼자 공부하는 컴퓨터구조 + 운영체제] Chap3. 명령어

 

[혼자 공부하는 컴퓨터구조 + 운영체제] Chap3. 명령어

이번 단원에서는 명령어에 대해서 배웠어요! 사람이 컴퓨터에게 일을 시키기 위해서는 컴퓨터에게 알맞은 명령을 내려야 합니다. 하지만 컴퓨터는 사람이 하는 모든 말을 알아듣지는 못해요...

eraser-adventure.tistory.com

다음 글을 보려면 ⬆️

 

이전 글을 보려면 ⬇️

2023.07.14 - [CS/컴퓨터 구조] - [혼자 공부하는 컴퓨터구조 + 운영체제] Chap1. 컴퓨터 구조를 알아야 하는 이유

 

[혼자 공부하는 컴퓨터구조 + 운영체제] Chap1. 컴퓨터 구조를 알아야 하는 이유

Chap1. 컴퓨터 구조를 알아야 하는 이유 ❓ 왜 컴퓨터 구조를 알아야 하는가? 1-1. 컴퓨터 구조를 알아야 하는 이유? 문제 상황을 빠르게 진단하고, 문제 해결의 실마리를 찾을 수 있음 → 다양한 문

eraser-adventure.tistory.com