본문 바로가기
취준

[컴퓨터구조] Chapter 02. 데이터

by 박매트 2024. 4. 18.

Chapter 02-1 | 0과 로 숫자를 표현하는 방법

 

정보 단위

컴퓨터가 이해하는 가장 작은 정보 단위 -> 0과 1을 나타내는 가장 작은 정보 단위를 비트라고 합니다.

 

ex. 전구 한 개로 (꺼짐) 혹은 (켜짐), 두 가지 상태를 표현할 수 있듯, 1비트는 0 또는 1, 두 가지 정보를 표현할 수 있습니다.

 

이진수의 음수 표현

십진수 음수를 표현할 땐 단순히 숫자 앞에 마이너스 부호를 붙이면 그만입니다.

-1, -3, -5 .. 이런 식으로요. 이진수는 그렇지 않습니다. 0과 1만으로 음수를 표현해야 합니다.

음수를 표현하는 방법 중 가장 널리 사용되는 방법은 2의 보수를 구해 이 값을 음수로 간주하는 방법입니다.

 

2의 보수는 '모든 0과 1을 뒤집고, 거기에 1을 더한 값'으로 이해하면 됩니다.

 

-1011(2)을 표현하기 위한 음수로서의 0101(2) 과 십진수 5를 표현하기 위한 양수로서의 0101(2)은 똑같이 생겼는데, 이진수만 보고 이게 음수인지 양수인지 어떻게 구분하는가?

 

-> 실제로 이진수만 봐서도 이게 음수인지 양수인지 구분하기 어렵다. 그래서 컴퓨터 내부에서 어떤 수를 다룰 때는 구분하고자 플래그를 사용합니다. 쉽게 말해 부가 정보입니다.

 

2의 보수 표현이 완벽한 방식은 아니다! 0과 2^n 형태의 이진수에는 원하는 음수값을 얻을 수 없다. 

즉, n비트로는 -2^n, +2^n을 구분할 수 없다는 뜻.

 

16진법

이진법은 0과 1만으로 모든 숫자를 표현하다보니 숫자의 길이가 너무 길어진다는 단점이 있습니다. 

그래서 데이터를 표현할 때 이진법 이외에 십육진법도 자주 사용합니다.

십진수, A, B, C, D, E, F로 표기합니다. 이진수에 비해 더 적은 자릿수로 더 많은 정보를 표현할 수 있습니다.

 

표현하는 법 1) 숫자(16) - 아래첨자, 수학적 표기방식 , 2) 숫자 앞에 0xㄹ를 붙여 구분합니다. , 코드상 표기 방식

 

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

십육진수를 이루는 숫자 하나를 이진수로 표현하려면 4비트가 필요합니다.

십육진수 한 글자를 4비트의 이진수로 간주하는 법.

 

즉, 16진수를 이루고 있는 각 글자를 따로따로 (4개의 숫자로 구성된) 이진수로 변환하고, 그것들을 그대로 이어 붙이면 십육진수가 이진수로 변환됩니다.

 

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

이진수 숫자를 네 개씩 끊고, 끊어 준 네 개의 숫자를 하나의 십육진수로 변환한 뒤 그대로 이어붙이면 됩니다. 

 

Chapter 02-2 | 0과 1로 숫자를 표현하는 방법

0과 1로 문자를 표현하는 방법, 즉 컴퓨터가 문자를 이해하고 표현하는 다양한 방법에 대해 알아보겠습니다.

 

문자 집합과 인코딩

반드시 알아야 할 세 가지 용어 : 1) 문자 집합, 2) 인코딩, 3) 디코딩

 

문자 집합 : 컴퓨터가 인식하고 표현할 수 있는 문자의 모음,  컴퓨터는 문자 집합에 속해 있는 문자를 이해할 수 있고 속해 있지 않다면 이해할 수 없습니다.

 

그렇다고 속했다고 해서 바로 이해할 수 있는 건 아니다. 문자를 0과 1로 변환해야 비로소 컴퓨터가 이해할 수 있습니다.

이 변환 과정을 문자 인코딩 이라 합니다.

 

인코딩 후 0과 1로 이루어진 결과 값이 문자 코드가 됩니다. 같은 문자 집합에 대해서도 다양한 인코딩 방법이 있을 수 있습니다.

 

문자 디코딩 : 인코딩의 반대 과정, 즉 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정

 

컴퓨터(0과 1로 이루어져 있는 값) <= 인코딩 <= 문자

컴퓨터(0과 1로 이루어져 있는 값) => 디코딩 => 문자

 

아스키 코드

초창기 문자 집합 중 하나로, 영여 알파벳과 아라비아 숫자, 그리고 일부 특수 ㅜㄴ자를 포함합니다. 각각 7비트로 표현되며, 총 128개의 문자를 표현할 수 있습니다.

 

EUC-KR

한글 인코딩을 이해하려면 한글의 특수성을 알아야 합니다. 알파벳을 쭉 이어 쓰면 단어가 되는 영어와는 달리, 한글은 음절 하나하나가 초성, 중성, 종성의 조합으로 이루어져 있습니다. 그래서완성형 인코딩 방식, 조합형 인코딩 방식이 존재합니다. 따라서 EUC-KR은 문자 집합을 기반으로 하는 대표적인 완성형 인코딩 방식입니다. ㄱ초, 중, 종성이 모두 결합된 한글 단어에 2바이트 크기의 코드를 부여합니다.

 

유니코드와 UTF-8

인코딩 덕분에 한국어를 코드로 표현할 수 있게 되었습니다. 하지만 모든 한글을 표현할 수 없다는 한계가 있었ㅅ브니다. 인코딩을 나라마다 해야한다면 다국어를 지원하는 프로그램을 만들 때 각 나라 언어의 인코딩을 모두 알아야 하는 번거로움이 있습니다.

 

그래서 등장한 것이 유니코드 문자 집합입니다. 유니코드는 EUC-KR 보다 훨씬 다양한 한글을 포함하며 대부분 나라의 문자, 특수문자, 화살표나 이모티콘까지도 코드로 표현할 수 있는 통일된 문자 집합입니다. 

 

아스키 코드나 EUC-KR은 글자에 부여된 값을 그대로 인코딩 값으로 삼은 반면, 유니코드는 족므 다릅니다.

부여된 값 자체를 인코딩 값으로 삼지 않고 이 값을 다양한 방법으로 인코딩 합니다.

 

UTF-8, UTF-16 등등 있으며, 가장 대중적인 UTF-8 을 주로 사용합니다.