🖥️ 컴퓨터는 어떻게 데이터를 저장할까?
— 비트(Bit)와 바이트(Byte) 완전 정복
핵심 요약: 컴퓨터는 모든 데이터를
0과1만으로 표현한다.
이 가장 작은 단위인 비트가 모여 바이트가 되고, 그것이 곧 메모리의 기초다.
1️⃣ 비트(Bit) — 컴퓨터의 최소 단위
비트(Bit, Binary Digit) 는 컴퓨터가 데이터를 표현하는 가장 작은 단위다.
값은 오직 0 또는 1, 단 두 가지뿐이다.
⚡ 비트는 실제로 "전기 신호"다
비트는 단순한 숫자 개념이 아니라, 하드웨어 레벨에서는 전압(Voltage)의 상태를 의미한다.
| 비트 값 | 전기적 상태 | 전압 |
|---|---|---|
0 | 전압 낮음 (Low) | 0V 근처 |
1 | 전압 높음 (High) | 3.3V 또는 5V |
이 스위치 역할을 하는 소자가 바로 트랜지스터(Transistor) 다.
CPU 하나에는 수십억 개의 트랜지스터가 들어있으며, 이것들이 켜지고(1) 꺼지면서(0) 모든 연산을 처리한다.
[트랜지스터 ON] → 전류 흐름 → 1
[트랜지스터 OFF] → 전류 차단 → 0
💡 즉, 우리가 보는 모든 텍스트, 이미지, 영상은 결국 수십억 개의 트랜지스터가 켜지고 꺼지는 상태의 조합이다.
2️⃣ 바이트(Byte) — 데이터 처리의 기본 단위
바이트(Byte) 는 8개의 비트를 하나로 묶은 단위다.
메모리 주소를 할당하고 데이터를 읽고 쓰는 기본 단위로 사용된다.
1 Byte = 8 Bits
[ 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 ]
↑ ↑
최상위 비트(MSB) 최하위 비트(LSB)
🔢 1바이트로 몇 가지 값을 표현할 수 있을까?
8개의 비트 각각이 0 또는 1을 가질 수 있으므로:
2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 2⁸ = 256가지
부호 없는(unsigned) 정수 기준으로 0 ~ 255 의 값을 표현할 수 있다.
🤔 왜 하필 8비트일까?
초기 컴퓨터에서 영문자 + 숫자 + 특수문자를 포함한 ASCII 문자 하나를 표현하는 데 7~8비트가 필요했다.
이 기준이 표준으로 자리잡아 지금까지 이어지고 있다.
| ASCII 문자 | 10진수 | 2진수 (1바이트) |
|---|---|---|
A | 65 | 0100 0001 |
a | 97 | 0110 0001 |
0 | 48 | 0011 0000 |
3️⃣ 비트 vs 바이트 — 한눈에 비교
| 구분 | 비트 (bit) | 바이트 (byte) |
|---|---|---|
| 크기 | 데이터 최소 단위 | 8 bits |
| 값의 범위 | 0 또는 1 | 0 ~ 255 (unsigned) |
| 하드웨어 | 트랜지스터 1개의 상태 | 메모리 1칸의 크기 |
| 용도 | 논리 연산, 플래그(Flag) | 문자 표현, 메모리 주소, 파일 크기 |
4️⃣ 데이터 크기 단위 확장
비트와 바이트를 기반으로 더 큰 단위가 파생된다.
| 단위 | 크기 | 설명 |
|---|---|---|
| 1 Bit | - | 0 또는 1 |
| 1 Byte | 8 bits | 문자 1개 수준 |
| 1 KB (Kilobyte) | 1,024 Bytes | 짧은 텍스트 파일 수준 |
| 1 MB (Megabyte) | 1,024 KB | 음악 파일 1곡 수준 |
| 1 GB (Gigabyte) | 1,024 MB | 영화 1편 수준 |
| 1 TB (Terabyte) | 1,024 GB | 대용량 하드디스크 수준 |
💡 KB, MB, GB에서 1,024를 사용하는 이유?
컴퓨터는 2진법 기반이라 2의 거듭제곱 단위가 자연스럽다. 2¹⁰ = 1,024 이기 때문이다.
5️⃣ Java에서의 정수 타입과 연결
비트/바이트 개념은 Java 기본 타입과 직결된다.
byte b = 127; // 1 byte = 8 bits → -128 ~ 127
short s = 32767; // 2 bytes = 16 bits → -32,768 ~ 32,767
int i = 2147483647; // 4 bytes = 32 bits → 약 ±21억
long l = 9999999999L; // 8 bytes = 64 bits → 매우 큰 수
타입의 메모리 크기(byte)를 알면 저장 가능한 값의 범위를 직접 계산할 수 있다.
n비트 signed 정수의 범위 = -2^(n-1) ~ 2^(n-1) - 1
예) int = 32bit → -2^31 ~ 2^31 - 1 = -2,147,483,648 ~ 2,147,483,647