유틸리티

진법 변환, 2진수·10진수·16진수 쉽게 바꾸는 법

코딩 수업에서 '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 = 9
  • 1010 = 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 문자 코드 변환도 지원해서, 직접 계산할 일이 거의 없다.