Computer Science/컴퓨터 구조

컴퓨터 데이터, 정보단위

물리 water lee 2024. 10. 15. 13:37

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

정보 단위

컴퓨터가 표현하는 정보단위란?

컴퓨터는 0 또는 1밖에 이해하지 못합니다.

(*이진수는 컴퓨터의 회로에서 전기 신호의 상태(켜짐, 꺼짐)를 표현하는데 적합하기 때문에 사용합니다.)

 

0과 1을 나타내는 가장 작은 정보 단위를 비트 bit(Binary Digit)라고 합니다.

 

비트는 0과 1을 표현할 수 있는 가장 작은 정보 단위

 

예를 들어, 하나의 전구를 꺼짐켜짐  두 가지 상태를 표현할 수 있듯이,

비트는 0 또는 1, 두 가지 정보를 표현할 수 있습니다.

 

그럼 2개의 전구는 몇 가지 상태를 보여줄 수 있을까요?

(꺼짐, 꺼짐), (꺼짐, 켜짐), (켜짐, 꺼짐), (켜짐, 켜짐) 총 4가지의 정보를 표현할 수 있습니다.

 

이처럼 2비트는 4가지를 표현할 수 있습니다.

 

그러면 3개의 전구는 몇 가지 상태를 보여줄 수 있을까요?

 

위 사진처럼 8가지의 상태를 표현할 수 있습니다. 즉, 3비트도 8가지를 표현할 수 있습니다.

 

n개의 전구로 표현할 수 있는 상태는 $ 2^n $이듯이

n비트는 $2^n$가지 정보를 표현할 수 있습니다.

 

웹 브라우저, 워드 프로세서, 포토샵 등 우리가 실행하는 모든 프로그램은 수십만, 수백만 개 이상의 0과 1로 이루어져있습니다.

그런데 우리가 일상적으로 프로그램의 크기를 말할 때 "이 파일은 8,920,120비트야"라고 말하지는 않습니다.

프로그램의 크기를 말할 때는 표현의 편의를 위해 비트보다 큰 단위를 사용하게 됩니다.

 

  • 바이트 Byte
    • 여덟 개의 비트를 묶은 단위
    • 비트보다 한 단계 큰 단위
    • 하나의 바이트가 표현할 수 있는 정보는 몇 개? 1Byte = 8bit
    • 즉, 256($2^8$)개의 정보를 표현할 수 있다.
  • 킬로바이트 KB; Kilo-byte
    • 바이트보다 더 큰 단위
    • 1바이트를 1000개를 묶은 단위
  • 메가바이트 MB; Mega-byte
    • 1킬로바이트를 1000개 묶은 단위
  • 기가바이트 GB; Giga-byte
    • 1메가바이트를 1000개 묶은 단위
  • 테라바이트 TB; Tera-byte
    • 1기가바이트를 1000개 묶은 단위

 

1KB는 1,024 Byte, 1MB는 1,024 KB ... 이런 식으로 표현하는 것은 잘못된 관습입니다.

이전 단위를 1,024개 묶어 표현한 단위는 KiB, MiB, GiB, TiB입니다.

 

더보기

중요한 정보 단위 중 워드라는 단위도 있습니다.

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

만약 CPU가 한 번에 16비트를 처리할 수 있다면 1워드는 16비트가 되고, 한 번에 32비트를 처리할 수 있다면 1워드는 32비트가 되는 것입니다.

 

이렇게 정의한 워드의 절반 크기를 하프 워드(half word), 1배 크기를 풀 워드(full word), 2배 크기를 더블 워드(double word)라고 부릅니다.

 

워드 크기가 큰 CPU는 한 번에 처리할 수 있는 데이터가 많습니다.

워드 크기는 CPU마다 다르지만, 현대 컴퓨터의 워드 크기는 대부분 32비트 또는 64비트입니다. 가령 인텔의 x86 CPU는 32비트 워드 CPU, x64 CPU는 64비트 워드 CPU입니다.

이진법

수학에서 0과 1만으로 모든 숫자를 표현하는 방법을 이진법(binary)이라고 표현합니다.

이진법을 이용하면 1보다 큰 수도 0과 1만으로 표현할 수 있습니다.

 

 

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

 

더보기

이진수의 자릿수는 오른쪽부터 시작해서 각각 2의 거듭제곱을 의미합니다.

예를 들어, 이진수 1011을 10진수로 변환해보면 다음과 같습니다.

 

 

  • 첫 번째 자리는 $2^0$이므로 1
  • 두 번째 자리는 $2^1$이므로 2
  • 세 번째 자리는 $2^2$이므로 4
  • 네 번째 자리는 $2^3$이므로 8

따라서, 이진수 1011은 8+0+2+1 = 11로 10진수 11에 해당합니다.

 

 

 

 

0과 1밖에 모르는 컴퓨터에 어떤 숫자를 알려 주려면 십진수가 아닌 이진수로 알려 주어야 합니다. 가령, 십진수 2를 컴퓨터에 알려주면 이진수로 표현한 10을 알려주면 되고, 십진수 8을 컴퓨터에 알려 주려면 이진수로 표현한 1000을 알려주면 됩니다.

 

그런데 여기서 한 가지 문제점이 있습니다.

 

10

 

이것은 이진수일까요? 십진수일까요? 구분할 수 있나요?

이런 혼동을 예방하기 위해 이진수 끝에 아래 첨자 (2)를 붙이거나 이진수 앞에 0b를 붙입니다. 전자는 주로 이진수를 수학적으로 표기할 때, 후자는 주로 코드 상에서 이진수를 표기할 때 사용합니다.

 

 

이진수의 음수 표현

십진수 음수의 경우 -1, -3, -5 ... 이런 식으로 표현할 수 있습니다.

이진수도 똑같을까요?

 

컴퓨터는 0과 1만 이해할 수 있기 때문에, 마이너스 부호를 사용하지 못합니다.

 

따라서 0과 1만으로 음수를 표현하는 방법 중 가장 널리 사용되는 방법은 2의 보수(two's complement)를 구해 이 값을 음수로 간주하는 방법입니다.

 

 

2의 보수의 사전적 의미는 '어떤 수를 그보다 큰 $ 2^n$에서 뺀 값'을 의미합니다.

 

예를 들어 $ 11_{(2)} $의 2의 보수는 $ 11_{(2)} $보다 큰  $ 2^n$ 즉, $ 100_{(2)} $에서 $ 11_{(2)} $을 뺀 $ 01_{(2)} $이 되는 것이지요.

하지만 굳이 이렇게 사전적 의미로 어렵게 이해할 필요는 없습니다.

2의 보수를 매우 쉽게 표현하자면 '0과 1을 뒤집고, 거기에 1을 더한 값'으로 이해하면 됩니다.

 

예를 들어, $11_{(2)}$의 모든 0과 1을 뒤집으면 $00_{(2)}$이고, 거기에 1을 더한 값은 $01_{(2)}$입니다.

즉, $11_{(2)}$의 2의 보수(음수 표현)는 $01_{(2)}$이 되는 것이죠.

 

 

모든 이진수의 0과 1을 뒤집은 수를 1의 보수라고 합니다.
거기에 1을 더한 값을 2의 보수라고 합니다.
컴퓨터는 이 수를 음수로 간주합니다.

 

 

 

$1011_{(2)}$의 음수를 구해봅시다.

$1011_{(2)}$에서 모든 0과 1을 뒤집으면 $0100_{(2)}$이 되지요?

즉, $0101_{(2)}$은 $1011_{(2)}$의 음수입니다.

 

어떤 수의 2의 보수를 두 번 구해보면 자기 자신이 됩니다.

$1011_{(2)}$의 2의 보수를 두 번 구해 보면 자기 자신인 $1011_{(2)}$이 되는 것을 볼 수 있습니다.

 

즉, -(-A)=A이 된 것을 확인할 수 있습니다.

 

🤔 궁금증이 생겼습니다.

$1011_{(2)}$의 2의 보수는 $0101_{(2)}$인데

십진수 5를 표현하기 위한 양수로서의 $0101_{(2)}$과 똑같이 생겼다는 점입니다.

컴퓨터는 어떻게 음수인지 양수인지 확인할 수 있을까요?

 

실제로 이진수만 봐서는 이게 음수인지 양수인지 구분하기 어렵습니다.

그래서 컴퓨터 내부에서 어떤 수를 다룰 때는 이 수가 양수인지 음수인지를 구분하기 위해 플래그(flag)를 사용합니다.

 

플래그는 쉽게 말해서 부가 정보입니다.

 

컴퓨터 내부에서 어떤 값을 다룰 때 부가 정보가 필요한 경우 플래그를 사용합니다.

컴퓨터 내부에서 숫자들은 '양수' 혹은 '음수'가 적혀있는 부호 비트(sign bit)/플래그를 들고 다니므로 컴퓨터가 부호를 헷갈릴 일은 없습니다.

 

 

더보기

[2의 보수 표현의 한계]

 

이진수의 음수를 표현하기 위해 2의 보수를 취하는 방식은 아직까지도 가장 널리 사용되는 방식이지만, 완벽한 방식은 아닙니다.

0이나 $2^n$ 형태의 이진수에 2의 보수를 취하면 아래와 같이 원하는 음수값을 얻을 수 없습니다.

 

 

 

왼쪽의 경우 자리 올림이 발생한 비트의 1을 버립니다.

하지만 오른쪽 경우와 같이 $2^n$의 보수를 취하면 자기 자신이 되어버리는 문제는 본질적으로 해결하기 어렵습니다.

즉, n비트로는 $-2^n$과 $2^n$이라는 수를 동시에 표현할 수 없습니다.

 

16진법 hexadecimal

 

이진법을 이용해 0과 1만으로 모든 숫자를 표현할 수 있었습니다.

 

하나의 이진수는 하나의 비트로 나타낼 수 있기에 이진법을 이용하면 컴퓨터가 이해하는 숫자 정보를 직접적으로 표현할 수 있습니다.

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

 

예를 들어, 십진수 32를 이진수로 표현하면 $100000_{(2)}$과 같이 여섯 개의 자릿수가 필요합니다.

 

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

 

십육진법은 수가 15를 넘어가는 시점에 자리 올림을 하는 숫자 표현 방식입니다. 그리고 십진수 10, 11, 12, 13, 14, 15를 십육진법 체계에서는 각각 A, B, C, D, E, F로 표기합니다.

 

십육진수는 한 글자로 열여섯 종류의 정보를 표현할 수 있으니, 이진수에 비해 더 적은 자릿수로 더 많은 정보를 표현할 수 있습니다.

또한, 십육진수도 이진수와 마찬가지로 숫자 뒤에 아래첨자 (16)를 붙이거나 숫자 앞에 0x를 붙여 구분합니다.

마찬가지로 전자는 주로 수학적으로 십육진수를 표기할 때, 후자는 코드상에서 십육진수를 표기할 때 사용되는 방식입니다.

 

 

더보기

십육진수 A~F를 쉽게 이해하는 방법

 

십육진법을 처음 접했다면 십육진수 A가 10, 십육진수가 B가 11을 뜻한다는 사실이 잘 와닿지 않을 수도 있습니다.

 

주먹을 쥐었을 때가 A라고 생각해보세요!

손가락을 하나도 안폈으니 0입니다.

D는 십진수로 무엇일까요? 주먹을 쥐었을 때가 A라고 했으니, A, B, C, D 차례로 손가락을 하나씩 펴면 D는 손가락이 세 개 펴집니다. 따라서 십육진수는 D는 13입니다.

 

 

🤔 0과 1밖에 이해하지 못한다고하여 이진수를 썼는데 왜 굳이 십육진법을 사용할까요?

여러가지 이유가 있지만, 십육진법을 사용하는 주된 이유 중 하나는 이진수를 십육진수로, 십육진수를 이진수로 변환하기 쉽기 때문입니다.

 

16진수 ➡️ 2진수

 

십육진수는 한 글자당 열여섯 종류(0~9, A~F)의 숫자를 표현할 수 있습니다.

그렇다면 십육진수를 이루는 숫자 하나를 이진수로 표현하는데 몇 비트가 필요할까요?

바로 4비트 입니다. $2^4 = 16$

 

십육진수를 이진수로 변환하는 간편한 방법 중 하나는 십육진수 한글자를 4비트의 이진수로 간주하는 것입니다.

위의 그림을 보면 이해할 수 있습니다.

 

2진수 ➡️ 16진수

 

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

 

 

더보기

코드에 16진수를 직접 넣는 사례

 

십육진수는 프로그래밍할 때 이진수와 더불어 자주 사용되므로 기억해두는 것이 좋습니다.

하드웨어와 밀접하게 맞닿아 있는 개발 분야에서는 아래와 같이 코드에 십육진수를 직접 쓰는 경우도 더러있기 때문입니다.

 

 

코드의 뜻은 알 필요 없지만, 프로그래밍할 때 십육진수를 직접 써넣는 경우도 많다는 사실만 인지하면 됩니다.

 

 


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

0과 1밖에 모르는 컴퓨터가 어떻게 문자를 이해하고 표현할 수 있을까요?

 

문자 집합과 인코딩

0과 1로 문자를 표현하는 방법에 대해 알아보기 전에 반드시 알아야 할 세가지 용어가 있습니다.

 

바로 문자 집합, 인코딩, 디코딩입니다.

 

컴퓨터가 인식하고 표현할 수 있는 문자의 모음을 문자 집합 Character set이라고 합니다.

컴퓨터는 문자 집합에 속해 있는 문자를 이해할 수 있고, 반대로 문자 집합에 속해 있지 않은 문자는 이해할 수 없습니다.

애를 들어 문자 집합이 {a, b, c, d, e}인 경우 컴퓨터는 이 다섯 개의 문자는 이해할 수 있고 f나 g같은 문자는 이해하지 못합니다.

 

문자 집합에 속한 문자라고 해서 컴퓨터가 그대로 이해할 수 있는 건 아닙니다.

문자를 0과 1로 변환해야 비로소 컴퓨터가 이해할 수 있습니다.

이 변환 과정을 문자 인코딩 character encoding이라 하고 인코딩 후 0과 1로 이루어진 결과값이 문자 코드가 됩니다.

같은 문자 집합에 대해서도 다양한 인코딩 방법이 있을 수 있습니다.

 

인코딩의 반대 과정, 즉 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정은 문자 디코딩 character decoding이라고 합니다.

 

정리하면

컴퓨터가 인식할 수 있는 문자들의 모음은 문자 집합.

이 문자들을 컴퓨터가 이해할 수 있는 0과 1로 변환하는 과정을 인코딩,

반대로 0과 1로 표현된 문자 코드를 사람이 읽을 수 있는 문자로 변환하는 과정을 디코딩이라고 합니다.

 

아스키 코드

아스키 ASCII; American Standard Code for Information Interchange는 초창기 문자 집합 중 하나로, 영어 알파벳과 아라비아 숫자, 그리고 일부 특수 문자를 포합합니다.

 

아스키 문자 집합에 속한 문자(이하 아스키 문자)들은 각각 7비트로 표현되는 데, 7비트로 표현할 수 있는 정보의 가짓수는 $2^7$개로, 총 128개의 문자를 표현할 수 있습니다.

 

 

실제로 하나의 아스키 문자를 나타내기 위해 8비트(1바이트)를 사용합니다.

하지만 8비트 중 1비트는 패리티 비트(parity bit)라고 불리는, 오류 검추를 이해 사용되는 비트이기 때문에 실질적으로 문자 표현을 위해 사용되는 비트는 7비트 입니다.

 

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

아스키 문자에 대응된 고유한 수아스키 코드라고 합니다.

우리는 아스키 코드를 이진수로 표현함으로써 아스키 문자를 0과 1로 표현할 수 있습니다.

아스키 문자는 이렇게 아스키 코드로 인코딩 됩니다.

 

아스키 문자 집합에 0부터 127가지의 수가 할당되어 아스키 코드로 인코딩 됩니다.

 

 

예를 들어, 'A'는 십진수 65(이진수 $1000001_{(2)}$)로 인코딩 되고,

'a'는 십진수 97(이진수 $1100001_{(2)}$)로,

특수문자 !는 십진수 33(이진수 $100001_{(2)}$)으로 인코딩 됩니다.

 

표를 보면 Backspace, Escape, Cancel, Space와 같은 제어 문자도 아스키 코드에 포함되어 있다는 사실을 알 수 있습니다.

 

더보기

문자 인코딩에서 '글자에 부여된 고유한 값'을 코드 포인트(code point)라고 합니다.

가령 아스키 문자 A의 코드 포인트는 65입니다.

위에서는 코드 포인트 용어 대신 문자에 부여된 값, 문자에 부여된 코드라는 용어로 설명

 

이렇듯 아스키 코드는 매우 간단하게 인코딩된다는 장점이 있지만, 단점이 있습니다.

한글을 표현할 수 없습니다.

한글 뿐만 아니라 아스키 문자 집합 외의 문자, 특수 문자도 표현할 수 없습니다.

근본적으로 아스키 문자 집합에 속한 문자들은 7비트로 표현하기에 128개보다 많은 문자를 표현하지 못하기 때문입니다.

 

훗날 더 다양한 문자 표현을 위해 아스키 코드에 1비트를 추가한 8비트 확장 아스키(extended ASCII)가 등장하기도 했지만, 그럼에도 표현 가능한 문자의 수는 256개여서 턱없이 부족했습니다.

 

그래서 한국을 포함한 영어권 외의 나라들은 자신들의 언어를 0과 1로 표현할 수 있는 고유한 문자 집합과 인코딩 방식이 필요하다고 생각했습니다. 이런 이유로 등장한 한글 인코딩 방식이 바로 EUC-KR입니다.

 

EUC-KR

한글 인코딩을 이해하려면 우선 한글의 특수성을 알아야 합니다.

알파벳을 쭉 이어 쓰면 단어가 되는 영어와 달리, 한글은 각 음절 하나하나가 초성, 중성, 종성의 조합으로 이루어져 있습니다.

 

한글 인코딩에는 두 가지 방식이 존재합니다.

  • 완성형 인코딩
    • 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 인코딩 방식
    • 예를 들어 '가'는 1, '나'는 2, '다'는 3, ... 이런식으로 인코딩 하는 방식
  • 조합형 인코딩
    • 초성을 위한 비트열, 중성을 위한 비트열, 종성을 위한 비트열을 할당하여 그것들을 조합으로 하나의 글자 코드를 완성하는 인코딩 방식
    • 초성, 중성, 종성에 해당하는 코드를 합하여 하나의 글자 코드를 만드는 인코딩 방식

EUC-KR은 KS X 1001, KS X 1003이라는 문자 집합을 기반으로 하는 대표적인 완성형 인코딩 방식.

즉, EUC-KR 인코딩은 초성, 중성, 종성이 모두 결합된 한글 단어에 2바이트 크기의 코드를 부여합니다.

 

한글 한 글자에 2바이트 코드가 부여되어, 다시 말해 EUC-KR로 인코딩된 한글 한 글자를 표현하려면 16비트가 필요합니다.

그리고 16비트는 네 자리 십육진수로 표현할 수 있습니다. 즉, EUC-KR로 인코딩된 한글은 네자리 십육진수로 나타낼 수 있습니다.

 

가는 b0a1, 거는 b0c5로 인코딩

 

EUC-KR 인코딩 방식으로 총 2,350개 정도의 한글 단어를 표현할 수 있습니다.

 

아스키 코드보다 표현할 수 있는 문자는 많아졌지만, 사실 이 모든 한글 조합을 표현할 수 있을 정도로 많은 아닙니다.

그래서 문자 집합에 정의되지 않은 '쀓'같은 글자는 EUC-KR로 표현할 수 없습니다.

 

모든 한글을 표현할 수 없다는 사실은 때때로 크고 작은 문제를 유발합니다.

  • EUC-KR 인코딩을 사용하는 웹사이트의 한글이 깨짐
  • EUC-KR 방식으로는 표현할 수 없는 이름 ➡️ 은행, 학교 등에서 피해를 받음

이러한 문제를 조금이나마 해결하기 위해 등장한 것이 마이크로소프트의 CP949(code page 949)입니다.

CP949는 EUC-KR의 확장된 버전으로, EUC-KR로 표현할 수 없는 더욱 다양한 문자를 표현할 수 있습니다.

다만, 이 마저도 한글 전체를 표현하기에 넉넉한 양은 아닙니다.

 

유니코드와 UTF-8

EUC-KR에서 한국어를 코드로 표현할 수 있게 되었지만, 모든 한글을 표현할 수 없다는 한계가 있었습니다.

더욱이 이렇게 언어별로 인코딩을 나라마다 해야 한다면 다국어를 지원하는 프로그램을 만들 때 각 나라 언어의 인코딩을 모두 알아야 하는 번거로움이 있습니다.

 

에를 들어 한국어, 영어, 일본어, 중국어, 독일어를 지원하는 웹사이트가 있다면 이 웹사이트는 다섯 개 언어의 인코딩 방식을 모두 이해하고 지원해야 합니다.

 

그런데 만약 모든 나라 언어의 문자 집합과 인코딩 방식이 통일되어 있다면, 언어별로 인코딩하는 수고로움을 덜 수 있습니다.

 

그래서 등장한 것이 유니코드(unicode) 문자 집합입니다. 

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

 

유니코드는 현대 문자를 표현할 때 가장 많이 사용되는 표준 문자 집합이며, 문자 인코딩 세계에서 매우 중요한 역할을 맡고 있습니다.

 

유니코드 문자 집합에서는 아스키 코드나 EUC-KR과 같이 각 문자마다 고유한 값이 부여됩니다.

 

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

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

 

이런 인코딩 방법에는 크게 UTF-8, UTF-16, UTF-32 등이 있습니다.

요컨대 UTF-8, UTF-16, UTF-32는 유니코드 문자에 부여된 값을 인코딩하는 방식입니다.

* UTF : Unicode Transformation Format

 

UTF-8

UTF-8은 통상 1바이트부터 4바이트까지의 인코딩 결과를 만들어냅니다.

다시 말해 UTF-8로 인코딩한 값의 결과는 1바이트가 될 수도 2바이트, 3바이트, 4바이트가 될 수도 있습니다.

UTF-8로 인코딩한 결과가 몇 바이트가 될지는 유니코드 문자에 부여된 값의 범위에 따라 결정됩니다.

 

 

  • 유니코드 문자에 부여된 값의 범위가 0부터 $007F_{(16)}$까지는 1바이트로 표현
  • 유니코드 문자에 부여된 값의 범위가 $0080_{(16)}$ ~ $07FF_{(16)}$는 2바이트로 표현
  • 유니코드 문자에 부여된 값의 범위가 $0800_{(16)}$ ~ $FFFF_{(16)}$는 2바이트로 표현
  • 유니코드 문자에 부여된 값의 범위가 $10000_{(16)}$ ~ $10FFFF_{(16)}$는 2바이트로 표현

'한글'은 몇 바이트로 구성될까요?

  • '한'에 부여된 값은 $D55C_{(16)}$ 
  • '글'에 부여된 값은 $AE00_{(16)}$
  • 0800과 FFFF사이이기 때문에 UTF-8로 인코딩하면 3바이트로 표현될 것을 예상할 수 있음

 

붉은색 X표가 있는 곳에 유니코드 문자에 부여된 고유한 값이 들어갑니다.

'한'과 '글'에 부여된 값은 $D55C_{(16)}$ , $AE00_{(16)}$입니다.

이는 각각 이진수로 $1101 0101 0101 1100_{(2)}$ , $1010 1110 0000 0000_{(2)}$ 입니다.

따라서 UTF-8 방식으로 인코딩 된 값은 다음과 같습니다. 이 수가 '한'과 '글의 UTF-8 방식으로 인코딩한 결과입니다.

 

 


📌 키워드로 정리하는 핵심 포인트

  • 비트는 0과 1로 표현할 수 있는 가장 작은 정보 단위입니다.
  • 바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트는 비트보다 더 큰 정보 단위입니다.
  • 이진법은 1을 넘어가는 시점에 자리 올림을 하여 0과 1만으로 수를 표현하는 방법입니다.
  • 이진법에서 음수는 2의 보수로 표현할 수 있습니다.
  • 십육진법은 15를 넘어가는 시점에 자리 올림하여 수를 표현하는 방법입니다.
  • 문자 집합은 컴퓨터가 인식할 수 있는 문자의 모음으로, 문자 집합에 속한 문자를 인코딩하여 0과 1로 표현할 수 있습니다.
  • 아스키 문자 집합에 0부터 127까지의 수가 할당되어 아스키 코드로 인코딩됩니다.
  • EUC-KR은 한글을 2바이트 크기로 인코딩할 수 있는 완성형 인코딩 방식입니다.
  • 유니코드는 여러 나라의 문자들을 광범위하게 표현할 수 있는 통일된 문자 집합이며, UTF-8, UTF-16, UTF-32는 유니코드 문자의 인코딩 방식입니다.

참고 자료

https://semiconductor.samsung.com/support/tools-resources/dictionary/bits-and-bytes-units-of-data/

https://youtu.be/kFWP6sFKyp0?si=Qsj3OjVnRfkkcRbN

 

'Computer Science > 컴퓨터 구조' 카테고리의 다른 글

컴퓨터 구조 시작하기  (6) 2024.10.02