유틸리티

진법 변환, 2진수 8진수 10진수 16진수 변환 방법 정리

프로그래밍 시험에 '10진수 200을 2진수로 변환하시오'라는 문제가 나왔다. 2로 나누고 나머지를 거꾸로 읽으면 되는 건 아는데, 손으로 하면 중간에 실수가 생기기 쉽다. 정답은 11001000이다.

진법이란

진법은 숫자를 표현하는 체계다. 일상에서 쓰는 10진법은 0~9까지 10개 숫자를 쓰고, 2진법은 0과 1만 쓴다.

진법사용 숫자10진수 15의 표현
2진수0, 11111
8진수0~717
10진수0~915
16진수0~9, A~FF

같은 숫자 15인데 표현 방식이 전부 다르다. 컴퓨터 내부에서는 2진수로 데이터를 처리하고, 사람이 읽기 편하게 10진수나 16진수로 변환해서 보여주는 것이다.

수동 변환 방법

10진수 → 2진수

10진수를 2로 계속 나누고, 나머지를 아래에서 위로 읽는다.

200 ÷ 2 = 100 ... 0
100 ÷ 2 = 50  ... 0
 50 ÷ 2 = 25  ... 0
 25 ÷ 2 = 12  ... 1
 12 ÷ 2 = 6   ... 0
  6 ÷ 2 = 3   ... 0
  3 ÷ 2 = 1   ... 1
  1 ÷ 2 = 0   ... 1
→ 11001000

2진수 → 10진수

각 자릿수에 2의 거듭제곱을 곱해서 더한다.

1111(2) = 1x8 + 1x4 + 1x2 + 1x1 = 15

16진수 ↔ 2진수

16진수 한 자리는 2진수 4자리와 대응한다. 그래서 16진수가 긴 2진수를 짧게 줄여 쓸 때 유용하다.

예: 0xFF = 1111 1111(2) = 255(10)

실무에서 진법을 쓰는 경우

  • 색상 코드 — CSS에서 #FF0000 같은 HEX 코드는 16진수다. FF는 10진수로 255.
  • 네트워크 — IP 주소의 서브넷 마스크를 2진수로 변환해야 네트워크 범위를 계산할 수 있다.
  • 파일 분석 — 바이너리 파일을 HEX 에디터로 열면 16진수로 표시된다.
  • 권한 설정 — 리눅스 파일 권한 chmod 755는 8진수다. 2진수로 풀면 111 101 101.

시험에서 손으로 풀어야 하는 게 아니라면 굳이 매번 나누기를 반복할 필요는 없다. 진법 변환기에 숫자를 넣으면 2진수, 8진수, 10진수, 16진수가 동시에 표시되고, 2~36진법까지 사용자 정의 변환도 가능하다. ASCII 문자 코드 변환도 지원해서 개발 작업 중에 참고하기 좋다.