컴퓨터가 다루는 데이터를 정리하기 위해 글을 작성하게 되었습니다.
1. 컴퓨터가 다루는 데이터
컴퓨터는 인간이 인식하는 의미나 개념을 직접 다루지 않습니다. 컴퓨터가 인식하고 처리할 수 있는 것은 오직 물리적으로 구분 가능한 상태 뿐이며, 이를 추상화한 것이 데이터입니다. 우리가 말하는 숫자, 문자, 이미지, 소리, 프로그램 코드 모두 컴퓨터 내부에서는 동일하게 비트의 집합으로 취급됩니다. 데이터의 의미는 컴퓨터가 이해하는 것이 아니라, 사람이 정한 해석 규칙 에 의해 부여됩니다.
In computer science, data is any sequence of one or more symbols; datum is a single unit of data. Data requires interpretation to become information. Digital data is data that is represented using the binary number system of ones and zeros, instead of analog representation.
1-1. 비트
비트는 컴퓨터가 다루는 데이터의 최소 단위로, 두 가지 상태만을 가지며, 이를 0과 1로 표현합니다. 이 값은 단순한 수학적 기호가 아니라, 하드웨어 수준에서는 전압의 높고 낮음, 전류의 흐름과 차단, 트랜지스터의 on/off 상태를 의미합니다.
The bit is the most basic unit of information in computing and digital communication. The name is a portmanteau of binary digit.
왜 비트가 최소 단위일까? 에 대해 생각해보면, 현실의 하드웨어에는 완벽한 0이나 1이 존재하지 않는데요. 전압은 연속적인 값이며, 항상 노이즈가 존재하기 때문입니다. 그래서 하드웨어는 특정 전압 범위 이하를 0으로, 특정 범위 이상을 1로 해석하는 임계값 기반 판단 방식을 사용하며, 이 덕분에 잡음이 있어도 안정적인 동작이 가능합니다. 현대 정보이론의 창시자 Shannon은 통신의 정의를 메시지를 그대로 또는 재현 하는 것으로 봤는데, 이를 위해서는 잡음을 잘 처리하는 것이 핵심 목표였죠.
The fundamental problem of communication is that of reproducing at one point either exactly or approximately a message selected at another point.
즉, 컴퓨터가 10진수가 아닌 2진수를, 비트를 기본 단위로 사용하는 이유는 단순함 때문도 있지만 신뢰성 과 안정성 도 있는 것이죠. 어느정도 잡음이 있어도 안정적인 동작이 가능하며, 두 상태만을 명확하게 구분하기 때문에 오류에 강한 선택이기 때문입니다. 그 결과 컴퓨터 내부의 모든 정보는 비트의 조합으로 표현되며, 의미는 그 위에 덧붙여진 규칙일 뿐입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
전압(V)
^
5V| ┌─────────────── 1 (HIGH)
| │ ↑
| 잡음 │ │ noise margin
| ┌─╱╲─╱╲─╱╲─┘ │
2V|─────┼───────────────────┼─── 임계값 (threshold)
| │ │
| └─╲─╱─╲─╱─╲─╱─┐ │
| 잡음 │ │
0V|───────────────────└─────┴──────── 0 (LOW)
+------------------------------------------------→ 시간
판정 결과:
임계값 이상 → 1
임계값 이하 → 0
1-2. 데이터 단위
비트 하나는 너무 작은 정보 단위이기 때문에, 실제 시스템에서는 여러 비트를 묶어 사용 합니다. 이때 데이터 량(Data Size)이란 특정 정보를 표현하기 위해 사용되는 비트의 총량이 등장하죠. 가장 기본적인 묶음은 8bit로 구성된 바이트(byte) 이며, 이후 데이터 량은 바이트 단위를 기준으로 증가합니다.
2진 기준 (컴퓨터 내부 기준)1byte= 8 bit1KB= 1024 byte1MB= 1024 KB1GB= 1024 MB
10진 기준 (SI 단위, 사람 기준)1kB= 1000 byte1MB= 1000 kB1GB= 1000 MB1TB= 1000 GB
이처럼 데이터는 단순히 얼마나 많이 존재하는지만이 아니라, 컴퓨터가 이를 어떤 크기로 나누어 한 번에 처리하는지도 중요합니다. 실제 시스템에서는 메모리를 얼마나 세밀하게 주소화할 것인지와, CPU가 어느 정도 크기의 데이터를 한 번에 처리할 것인지가 맞물리며 비트, 바이트, 워드와 같은 기준 크기들이 사용됩니다.
비트(bit): 구분 가능한 최소 단위바이트(byte): 메모리를 주소로 나누는 최소 단위워드(word): CPU가 자연스럽게 처리하는 기본 단위
워드의 크기는 시스템 아키텍처에 따라 16bit, 32bit, 64bit 등으로 정해지며, 이는 CPU가 한 번에 처리하는 기본 단위를 결정합니다. 이 기준에 맞춰 레지스터와 포인터의 크기도 함께 정해지며, 64bit 시스템은 32bit 시스템보다 더 큰 크기의 데이터를 한 번에 처리할 수 있습니다.
1
2
3
4
64bit 주소 공간(16 EB)
0x0000000000000000 ────────────────────────── 0xFFFFFFFFFFFFFFFF
|--------------------------------------------|
1
2
3
4
32bit 주소 공간 (4GB)
0x00000000 ─────────────────────────── 0xFFFFFFFF
|------------------------------------|
2. 8진수와 16진수, 그리고 가독성
컴퓨터 내부에서 모든 데이터는 이진수로 처리되지만, 이진수는 사람이 읽고 이해하기에는 지나치게 길고 복잡합니다. 예를 들어 메모리 주소나 레지스터 값 하나만 보더라도 수십 개의 비트가 나열되기 때문에, 비트 단위로 의미를 파악하는 것은 사실상 어렵습니다. 이러한 문제를 해결하기 위해, 이진수를 사람이 읽기 쉬운 다른 진법으로 표현하는 방식이 사용됩니다.
1
2
# CPU 레지스터 값 (64bit)
1010110010010010110100101100100101010010100100101101001011001001
이 과정에서 자연스럽게 등장한 것이 8진수와 16진수입니다. 두 진법 모두 이진수와 정확히 대응되며, 자리 올림이나 반올림 없이 비트 묶음을 그대로 표현할 수 있습니다. 8진수는 3비트씩 묶어 하나의 숫자로 표현하고, 16진수는 4비트씩 묶어 하나의 숫자로 표현합니다. 이 덕분에 이진수 ↔ 8진수, 이진수 ↔ 16진수 변환은 간단한 치환으로 이루어집니다.
1
2
# 이진수
110101110011
1
2
3
4
# 8진수
110 | 101 | 110 | 011
6 | 5 | 6 | 3
→ 0o6563
1
2
3
4
# 16진수
1101 | 0111 | 0011
D | 7 | 3
→ 0xD73
초기 컴퓨팅 환경에서는 8진수가 비교적 널리 사용되었습니다. 당시 컴퓨터의 워드 크기와 명령어 구조가 3bit 단위와 잘 맞았기 때문입니다.
Octal became widely used in computing when systems such as the UNIVAC 1050, PDP-8, ICL 1900 and IBM mainframes employed 6-bit, 12-bit, 24-bit or 36-bit words. Octal was an ideal abbreviation of binary for these machines because their word size is divisible by three.
하지만 시간이 지나면서 컴퓨터의 기본 처리 단위는 8bit 바이트로 정착되었습니다. 이에 따라 4bit씩 정확히 대응되는 16진수가 이진수를 표현하기 위한 가장 자연스러운 표기법이 되었습니다. 1byte는 16진수 두 자리로 정확히 표현할 수 있으며, 워드·레지스터·주소 값 역시 일정한 자릿수로 정렬할 수 있기 때문입니다.
After the introduction of the IBM System/360 design, which uses eight-bit characters and supports lower-case letters, the standard size of a character becomes eight bits. Word sizes thereafter are naturally multiples of eight bits, with 16, 32, and 64 bits being commonly used.
이러한 이유로 현대 시스템에서는 8진수보다 16진수가 보편적으로 사용됩니다. 메모리 주소, 머신 코드, 레지스터 값, 비트 마스크, 색상 코드(RGB) 등 저수준 영역에서는 16진수가 널리 사용되며, 이는 컴퓨터를 위한 것이 아니라 사람이 구조를 빠르게 파악하기 위한 표현 방식입니다.
1
2
RGB = [ Red ][ Green ][ Blue ]
1byte 1byte 1byte
1
2
3
4
5
#FF0000 → Red = 255, Green = 0, Blue = 0 (빨강)
#00FF00 → Red = 0, Green = 255, Blue = 0 (초록)
#0000FF → Red = 0, Green = 0, Blue = 255 (파랑)
#FFFFFF → Red = 255, Green = 255, Blue = 255 (흰색)
#000000 → Red = 0, Green = 0, Blue = 0 (검정)
3. 정리
컴퓨터가 다루는 데이터는 의미가 아니라 물리적으로 구분 가능한 상태이며, 모든 정보는 비트의 조합으로 표현됩니다. 비트는 너무 작기 때문에 바이트와 워드 같은 기준 단위가 사용되며, 이는 저장과 처리 방식의 기초가 됩니다. 내부 연산은 이진수로 이루어지지만, 사람의 가독성을 위해 8진수와 16진수가 사용되며, 오늘날에는 8bit 구조에 가장 잘 맞는 16진수가 표준적인 표현 방식으로 자리 잡았습니다.