코딩 수업에서 갑자기 "10진수 255를 2진수로 바꿔보세요"라는 문제가 나온다. 손으로 나눗셈을 반복하면 풀 수는 있는데, 16진수까지 나오면 머리가 복잡해진다. 진법 변환은 원리만 알면 단순한데, 실전에서는 도구를 쓰는 게 훨씬 빠르다.
진법이 왜 여러 개 있을까
컴퓨터는 0과 1만 이해하기 때문에 2진수가 기본이다. 하지만 2진수는 자릿수가 길어서 사람이 읽기 불편하다. 255를 2진수로 쓰면 11111111이 되는데, 16진수로 쓰면 FF 두 글자로 끝난다. 그래서 프로그래밍에서는 16진수를 자주 쓴다.
주요 진법 비교표
| 10진수 | 2진수 | 8진수 | 16진수 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 10 | 1010 | 12 | A |
| 100 | 1100100 | 144 | 64 |
| 255 | 11111111 | 377 | FF |
16진수에서 A~F는 10~15를 나타낸다. CSS 색상 코드 #FF0000이 빨간색인 이유도 R(빨강)이 16진수 FF, 즉 10진수 255(최대값)이기 때문이다.
손으로 변환하는 방법
10진수 → 2진수
10진수를 2로 나누면서 나머지를 역순으로 적으면 된다. 13을 예로 들면, 13÷2=6...1, 6÷2=3...0, 3÷2=1...1, 1÷2=0...1이므로 결과는 1101이다.
10진수 → 16진수
같은 원리로 16으로 나눈다. 255÷16=15...15이므로 15는 F, 결과는 FF가 된다. 나머지가 10 이상이면 A(10), B(11), C(12), D(13), E(14), F(15)로 바꿔야 해서 좀 더 번거롭다.
참고 시험이 아니라면 진법 변환기에 숫자를 넣는 게 빠르다. 한 칸에 입력하면 2진수, 8진수, 10진수, 16진수가 동시에 표시되고, 2~36진법까지 커스텀 변환도 가능하다. ASCII 문자 코드 변환도 지원한다.
프로그래밍에서 진법이 쓰이는 곳
- 색상 코드 — CSS에서
#FFFFFF는 16진수 표기 - 메모리 주소 — 디버깅 시
0x7FFE같은 16진수 주소 확인 - 권한 설정 — 리눅스 파일 권한
chmod 755는 8진수 기반 - 네트워크 — IP 서브넷 마스크 계산에 2진수 사용
진법 변환 원리는 나눗셈 반복이 전부라서 한 번 이해하면 어렵지 않다. 다만 실무에서 매번 손으로 할 필요는 없으니, 원리를 이해한 뒤에는 도구를 쓰는 게 실수를 줄이는 방법이다.