2강 / 20강

0과 1 — 컴퓨터가 가진 유일한 글자

비트·바이트, 그리고 용량 표기의 함정

0과 1 — 컴퓨터가 가진 유일한 글자
전기가 흐르면 1, 안 흐르면 0. 컴퓨터가 가진 글자는 이 둘뿐입니다.

컴퓨터 안에는 사실 숫자도, 글자도, 사진도 없습니다. 있는 것은 전기가 흐르는 곳과 안 흐르는 곳뿐이에요.

흐르면 1, 안 흐르면 0. 이 한 자리를 비트(bit)라고 부릅니다. 비트 하나로는 "예/아니오" 하나밖에 표현하지 못해요.

그래서 여러 개를 나란히 세웁니다. 자리를 늘릴 때마다 표현할 수 있는 가짓수가 두 배가 돼요.

1️⃣
1비트
2가지
0, 1
4️⃣
4비트
16가지
0000 ~ 1111
8️⃣
8비트 = 1바이트
256가지
0 ~ 255
🔢
32비트
약 43억 가지
자리 하나가 늘 때마다 두 배씩 뜁니다.
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 브라우저에서 실행
진법 변환기 — 숫자를 밀어 보며 2·10·16진수가 함께 움직이는 걸 보세요.
불러오는 중…

관리자를 울리는 함정 — 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진수로 얼마이고, 몇 비트가 필요할까요?
🤔 확인 문제
500GB 라고 적힌 SSD를 서버에 꽂았더니 df -h가 466G 라고 합니다. 왜일까요?