2강 / 20강
0과 1 — 컴퓨터가 가진 유일한 글자
비트·바이트, 그리고 용량 표기의 함정
컴퓨터 안에는 사실 숫자도, 글자도, 사진도 없습니다. 있는 것은 전기가 흐르는 곳과 안 흐르는 곳뿐이에요.
흐르면 1, 안 흐르면 0. 이 한 자리를 비트(bit)라고 부릅니다. 비트 하나로는 "예/아니오" 하나밖에 표현하지 못해요.
그래서 여러 개를 나란히 세웁니다. 자리를 늘릴 때마다 표현할 수 있는 가짓수가 두 배가 돼요.
자리 하나가 늘 때마다 두 배씩 뜁니다.
Python
브라우저에서 실행
왜 하필 2진법인가
사람은 손가락이 열 개라 10진법을 씁니다. 컴퓨터는 왜 굳이 불편한 2진법을 쓸까요?
답은 전기가 애매하기 때문입니다. 전압을 10단계로 나누려면 "이건 3인가 4인가" 하는 오차와 늘 싸워야 해요. 반면 0V냐 3.3V냐 둘 중 하나만 구분하면 됩니다. 훨씬 튼튼하고, 훨씬 빠르고, 훨씬 쌉니다.
2진수를 사람이 읽기 위한 지름길 — 16진수
11101100 같은 걸 사람이 읽고 옮겨 적기는 괴롭습니다.
그래서 4비트씩 묶어 한 글자로 씁니다. 4비트는 16가지니까 0~9에 A~F를 더해 쓰는 거예요.
이게 16진수(hex)입니다.
1110 1100 ↓ ↓ E C → 0xEC
로그 파일, 메모리 주소, 오류 코드에서 0x로 시작하는 숫자를 보면 전부 이겁니다.
같은 숫자를 세 가지 옷으로 갈아입혀 봅니다.
Python
브라우저에서 실행
관리자를 울리는 함정 — GB인가 GiB인가
free -h는 16Gi라고 하고, 하드디스크 상자에는 512GB라고 쓰여 있고,
윈도우 탐색기에서는 476GB라고 나옵니다. 누가 거짓말을 하는 걸까요?
아무도 거짓말하지 않습니다. 단위가 두 종류일 뿐이에요.
| 이름 | 배수 | 누가 쓰나 |
|---|---|---|
| KB, MB, GB (10의 거듭제곱) | 1000배씩 | 디스크 제조사, 네트워크 속도 |
| KiB, MiB, GiB (2의 거듭제곱) | 1024배씩 | 운영체제, 메모리, free·df |
SSD 상자의 512GB는 왜 476GiB로 보일까요.
Python
브라우저에서 실행
같은 디스크를 두 가지 방식으로 봅니다.
bash
브라우저에서 실행
바이트를 눈으로 보기
xxd는 어떤 데이터든 바이트 단위로 벗겨서 보여 줍니다.
관리자가 "파일이 깨졌다"는 신고를 받았을 때 제일 먼저 쓰는 도구예요.
글자 'A'는 사실 숫자 65, 비트로는 01000001 입니다.
bash
브라우저에서 실행
🤔 확인 문제
0xFF 는 10진수로 얼마이고, 몇 비트가 필요할까요?해설 F는 1111(15)이고 두 자리니까
11111111 = 255입니다. 8비트(1바이트)로 표현할 수 있는 가장 큰 값이 255예요. 가짓수는 256개(0~255)지만 최댓값은 255라는 점이 늘 헷갈리는 부분입니다.🤔 확인 문제
500GB 라고 적힌 SSD를 서버에 꽂았더니
df -h가 466G 라고 합니다. 왜일까요?해설 500 × 1000³ ÷ 1024³ ≈ 465.7 입니다. 정확히 맞아떨어져요. (여기에 파일 시스템 메타데이터가 조금 더 빠지긴 합니다.) 거짓말이 아니라 단위가 다른 것뿐입니다.