코딩 수업에서 '0xFF가 10진수로 몇이냐'는 질문에 굳어버린 적이 있다. 16진수를 10진수로 바꾸는 공식은 아는데, 머릿속에서 계산이 안 돌아갔다. 진법 변환은 원리를 알아도 손이 느려서 도구에 맡기는 게 현실적이다.
4가지 진법이 각각 쓰이는 곳
| 진법 | 표기 | 주요 사용처 |
|---|---|---|
| 2진수 | 0, 1 | 컴퓨터 내부 연산, 비트 연산, 네트워크 서브넷 마스크 |
| 8진수 | 0~7 | 리눅스 파일 권한 (chmod 755) |
| 10진수 | 0~9 | 일상 숫자, IP 주소, 포트 번호 |
| 16진수 | 0~F | 색상 코드(#FF5733), 메모리 주소, MAC 주소 |
프로그래밍을 하면 이 네 가지가 섞여서 나온다. CSS에서 색상은 16진수, 서브넷 마스크 계산은 2진수, 파일 권한은 8진수. 상황마다 진법이 달라서 변환이 자주 필요하다.
변환 원리 (10진수 ↔ 2진수)
10진수를 2진수로 바꾸려면 2로 계속 나누면서 나머지를 기록한다.
예시 10진수 13을 2진수로 변환
13 ÷ 2 = 6 나머지 1
6 ÷ 2 = 3 나머지 0
3 ÷ 2 = 1 나머지 1
1 ÷ 2 = 0 나머지 1
→ 나머지를 아래부터 읽으면 1101
반대로 2진수를 10진수로 바꿀 때는 각 자릿수에 2의 거듭제곱을 곱해서 더한다. 1101 = 1×8 + 1×4 + 0×2 + 1×1 = 13. 원리는 단순하지만 자릿수가 길어지면 손 계산이 번거롭다.
16진수와 2진수의 관계
16진수 한 자리는 2진수 네 자리와 정확히 대응한다. 그래서 긴 2진수를 4자리씩 끊으면 16진수로 쉽게 바꿀 수 있다.
0000= 0,0001= 1, ...1001= 91010= A,1011= B, ...1111= F- 2진수
11111111→ 4자리씩 끊으면1111 1111→ 16진수FF→ 10진수 255
네트워크 서브넷 마스크 255.255.255.0이 2진수로 쓰면 왜 11111111.11111111.11111111.00000000인지, 이 관계를 알면 이해가 된다.
시험이나 과제에서 직접 풀어야 할 때는 원리를 알아야 하지만, 실무에서는 진법 변환기에 숫자를 넣으면 2진수, 8진수, 10진수, 16진수가 동시에 나온다. 36진법 같은 특수 진법이나 ASCII 문자 코드 변환도 지원해서, 직접 계산할 일이 거의 없다.