프로그래밍 수업에서 "10진수 255를 2진수와 16진수로 바꿔보라"는 문제가 나왔다. 손으로 나누기를 반복해서 풀 수는 있는데, 자릿수가 커지면 실수가 잦고 검산도 어렵다.
진법이란
우리가 평소 쓰는 숫자 체계는 10진법이다. 0부터 9까지 열 개의 숫자를 쓰고, 9 다음에 자릿수가 올라간다. 컴퓨터에서는 이것 외에 2진법, 8진법, 16진법을 함께 사용한다.
| 진법 | 사용 숫자 | 주 용도 |
|---|---|---|
| 2진수 | 0, 1 | 컴퓨터 내부 연산, 비트 연산 |
| 8진수 | 0~7 | 유닉스 파일 권한(chmod 755) |
| 10진수 | 0~9 | 일상적인 숫자 표기 |
| 16진수 | 0~9, A~F | 메모리 주소, 색상 코드(#FF0000) |
손으로 변환하는 방법
10진수 → 2진수
변환하고 싶은 숫자를 2로 계속 나누면서 나머지를 역순으로 읽는다.
예시 13 → 2진수
13 ÷ 2 = 6 나머지 1
6 ÷ 2 = 3 나머지 0
3 ÷ 2 = 1 나머지 1
1 ÷ 2 = 0 나머지 1
역순으로 읽으면: 1101
2진수 → 16진수
2진수를 오른쪽부터 4자리씩 묶어서 각각 16진수로 바꾸면 된다.
- 1111 = F
- 1010 = A
- 0000 = 0
이 방법이 맞긴 하지만, 큰 숫자나 여러 개를 한꺼번에 변환해야 할 때는 시간이 오래 걸린다. 시험 검산용이나 실무에서 빠르게 확인할 때는 자동 변환 도구가 낫다.
자주 쓰이는 변환 예시
| 10진수 | 2진수 | 8진수 | 16진수 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 10 | 1010 | 12 | A |
| 255 | 11111111 | 377 | FF |
| 1024 | 10000000000 | 2000 | 400 |
255가 2진수로 11111111(8비트 전부 1)이라는 건 외워두면 유용하다. IP 주소의 서브넷 마스크(255.255.255.0)나 RGB 색상의 최대값(255)과 직결되기 때문이다.
하나의 입력창에 숫자를 넣으면 2진수, 8진수, 10진수, 16진수가 동시에 나오는 온라인 진법 변환기가 있다. ASCII 문자 코드 변환까지 되니까 프로그래밍 공부할 때 참고 도구로 쓸 만하다.
원리를 이해하는 건 손 계산으로, 실전에서 빠르게 확인하는 건 도구로. 둘 다 필요하다.