학습 자료 글/컴퓨터시스템

컴퓨터시스템 기초 5. 데이터는 왜 결국 비트로 표현될까

cedis 2026. 3. 31. 16:21

[컴퓨터 시스템] 5. 데이터는 왜 결국 비트로 표현될까

3편에서 메모리 주소를, 4편에서 실행 상태를 봤다면 이제 그 메모리 안에 실제로 무엇이 들어 있는지 봐야 합니다. 사람이 정수와 문자와 색과 포인터를 서로 다른 종류의 값처럼 느껴도, 컴퓨터는 결국 비트열을 해석하는 방식으로 그것들을 다룹니다.

이번 글은 비트 표현의 첫 관문입니다. 2진수와 16진수, signed와 unsigned, overflow를 따로따로 외우지 않고 '같은 비트열을 어떻게 읽느냐'라는 하나의 질문으로 묶어보겠습니다.

먼저 짚고 갈 용어
bit: 0 또는 1 한 칸으로 표현되는 가장 작은 정보 단위
signed: 음수까지 포함해 해석하는 방식
overflow: 표현 가능한 범위를 넘어가며 값 해석이 달라지는 현상
이번 글에서 다루는 것
  • 왜 모든 데이터가 결국 비트열로 저장된다고 말하는지
  • 2진수와 16진수를 같이 보는 이유
  • 같은 비트열이 signed와 unsigned에서 다르게 읽히는 이유
  • 2의 보수 관점에서 음수 표현을 이해하는 방법
  • overflow가 단순히 숫자가 커지는 현상이 아닌 이유
한눈에 보는 흐름
1
왜 모든 데이터가 결국 비트열로 저장된다고 말하는지
2
2진수와 16진수를 같이 보는 이유
3
같은 비트열이 signed와 unsigned에서 다르게 읽히는 이유
4
2의 보수 관점에서 음수 표현을 이해하는 방법

1. 데이터가 결국 비트라는 말은 무슨 뜻일까

메모리 안에서는 정수도, 문자도, 포인터도 결국 0과 1의 패턴으로 저장됩니다. 차이는 그 비트열 자체보다, 그 비트열을 어떤 규칙으로 해석하느냐에 있습니다.

그림으로 먼저 보기
정수 13
메모리 안에서: 비트 패턴
중요한 질문: 이 패턴을 어떤 수 체계로 읽는가
문자 A
메모리 안에서: 비트 패턴
중요한 질문: 어떤 문자 인코딩 규칙으로 읽는가
포인터
메모리 안에서: 비트 패턴
중요한 질문: 이 패턴을 주소로 읽는가

이 관점을 먼저 잡아두면 뒤에서 엔디안, 부동소수점, 어셈블리까지 이어질 때도 핵심 질문이 변하지 않습니다. 지금 보는 비트열을 어떤 형식으로 읽고 있는가가 중심 질문입니다.

겉으로 보는 값메모리 안에서중요한 질문
정수 13비트 패턴이 패턴을 어떤 수 체계로 읽는가
문자 A비트 패턴어떤 문자 인코딩 규칙으로 읽는가
포인터비트 패턴이 패턴을 주소로 읽는가

2. 2진수와 16진수는 같이 보는 편이 훨씬 낫다

2진수는 실제 비트 의미를 드러내기에 좋고, 16진수는 긴 비트열을 짧게 읽기에 좋습니다. 시스템 공부에서 둘을 함께 쓰는 이유는 계산 편의와 표현 충실도를 동시에 잡기 위해서입니다.

그림으로 먼저 보기
10
2진수: 1010
16진수: 0xA
13
2진수: 1101
16진수: 0xD
255
2진수: 11111111
16진수: 0xFF

특히 4비트가 16진수 한 자리와 정확히 대응된다는 사실을 익혀두면, 긴 메모리 덤프를 볼 때도 훨씬 덜 막막합니다.

10진수2진수16진수
1010100xA
1311010xD
255111111110xFF
공부 팁
비트 구조를 볼 때는 2진수로, 길게 나열된 값을 빠르게 읽을 때는 16진수로 보는 습관이 가장 실용적입니다.

3. 같은 비트열도 signed와 unsigned에서 값이 달라진다

중요한 건 비트열이 달라지는 것이 아니라 해석 규칙이 달라진다는 점입니다. 예를 들어 8비트 패턴 11111111은 unsigned로 읽으면 255지만, signed 2의 보수로 읽으면 -1이 됩니다.

그림으로 먼저 보기
01111111
unsigned 해석: 127
signed 해석: 127
11111111
unsigned 해석: 255
signed 해석: -1
10000000
unsigned 해석: 128
signed 해석: -128

즉 컴퓨터는 '이건 양수 패턴이다' 같은 태그를 비트 안에 따로 넣는 것이 아니라, 우리가 어떤 형으로 읽느냐에 따라 같은 패턴이 다른 의미를 가질 수 있습니다.

비트열unsigned 해석signed 해석
01111111127127
11111111255-1
10000000128-128

4. 2의 보수는 음수를 표현하는 계산 규칙이다

2의 보수는 처음엔 마법처럼 보이지만, 실제로는 덧셈 하드웨어를 크게 바꾸지 않고 음수를 표현하기 위한 규칙으로 이해하는 편이 좋습니다. 비트를 뒤집고 1을 더하는 기계적 규칙을 외우기보다, 왜 그런 표현이 유용한지 보는 쪽이 더 오래 갑니다.

핵심은 양수와 음수를 같은 덧셈 장치 위에서 다루기 쉽도록 표현 체계를 맞춘다는 데 있습니다.

과정 그림
1
8비트에서 +5는 00000101이다.
2
비트를 뒤집으면 11111010이 된다.
3
여기에 1을 더하면 11111011이 되고, 이것을 -5로 해석한다.
4
이제 +5와 -5를 더하면 00000000이 되어 같은 덧셈 규칙으로 상쇄된다.

5. overflow는 숫자가 커졌다가 아니라 표현 범위를 넘었다는 뜻이다

overflow를 단순히 값이 너무 커졌다고 이해하면 절반만 이해한 셈입니다. 정확히는 현재 비트 수와 현재 해석 규칙 안에서 표현 가능한 범위를 넘어서며 결과 해석이 달라지는 현상입니다.

그래서 overflow는 수학이 틀린 것이 아니라 표현 모델의 한계가 드러나는 장면입니다.

C
#include <stdio.h>
#include <stdint.h>

int main(void) {
    uint8_t a = 255;
    printf("%u\n", (uint8_t)(a + 1));
    return 0;
}
이 코드가 보여주는 것
8비트 unsigned에서는 255 다음 값을 그대로 담을 공간이 없으므로, 표현 가능한 범위 안에서 다시 0으로 돌아오는 해석이 나타납니다.

6. 이 감각이 실제 코드에서 바로 필요한 장면

signed와 unsigned가 섞인 비교, 좁은 정수형으로의 캐스팅, 네트워크 패킷 파싱, 메모리 덤프 읽기 같은 장면에서는 비트 표현 감각이 바로 필요합니다. 이론처럼 보이지만 실제 코드를 읽을 때도 계속 등장하는 기반입니다.

장면왜 비트 표현 감각이 필요한가
형 변환같은 비트열이 다른 규칙으로 읽힐 수 있다
메모리 덤프16진수 패턴을 값으로 다시 해석해야 한다
버그 분석overflow와 범위 초과를 눈치채야 한다

7. 직접 해볼 문제: 이 비트열은 어떻게 읽을까

핵심은 비트 자체보다 해석 규칙을 먼저 정하는 데 있습니다.

미니 문제
8비트 패턴 11111111을 보고 unsigned와 signed에서 각각 어떤 값이 되는지, 그리고 왜 같은 비트열이 두 값으로 읽히는지 설명해 보세요.

이번 글에서 기억할 것

모든 데이터는 결국 비트열이고, 차이는 그 비트열을 어떤 규칙으로 해석하느냐에 있다.
2진수와 16진수는 경쟁 관계가 아니라 함께 봐야 하는 표현 도구다.
overflow는 수학 오류가 아니라 현재 표현 모델의 범위를 넘어섰다는 신호다.

스스로 점검

왜 같은 비트열이 signed와 unsigned에서 다르게 읽힐 수 있는지 설명할 수 있는가
2의 보수를 왜 음수 표현 규칙이라고 보는지 말할 수 있는가
overflow를 단순히 숫자가 커졌다고가 아니라 표현 범위 문제로 설명할 수 있는가

다음 글 예고

다음 글에서는 멀티바이트 값이 메모리에 놓이는 순서, 즉 엔디안을 보면서 같은 값이 바이트 수준에서 어떻게 달라 보일 수 있는지 정리합니다.

한 줄 정리
데이터 표현 공부의 핵심은 비트가 바뀌는지보다, 같은 비트열을 어떤 규칙으로 읽고 있는지 계속 묻는 데 있습니다.