유틸리티

진법 변환, 2진수·8진수·10진수·16진수 변환 원리와 방법

프로그래밍을 처음 배우면 "0xFF는 255"라는 말을 듣게 된다. 색상 코드, IP 주소, 메모리 주소 같은 곳에서 16진수가 불쑥 나오는데, 10진수로 바꿔보기 전까지는 감이 잘 안 온다.

진법이 여러 개인 이유

컴퓨터는 전기 신호의 켜짐(1)과 꺼짐(0)만 구분한다. 그래서 내부적으로는 모든 데이터를 2진수로 처리한다. 하지만 2진수는 자릿수가 너무 길어서 사람이 읽기 불편하고, 10진수는 컴퓨터 구조와 맞지 않는다. 16진수는 2진수 4자리를 한 글자로 표현할 수 있어서 그 중간 역할을 한다.

10진수2진수8진수16진수
0000000
10101012A
100110010014464
25511111111377FF

어디서 어떤 진법을 쓰나

  • 2진수 — 비트 연산, 서브넷 마스크, 하드웨어 레지스터. 컴퓨터 구조를 공부할 때 필수.
  • 8진수 — 리눅스 파일 권한 (chmod 755). 일상적으로 쓸 일은 적지만 서버 관리에서 자주 만난다.
  • 10진수 — 일상에서 쓰는 숫자 체계 그대로.
  • 16진수 — 색상 코드(#FF5733), 메모리 주소(0x7FFF), MAC 주소, 유니코드 값.

변환 원리

10진수 → 2진수

10진수를 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진수 한 자리로 바꾸면 된다. 11111111 → 1111 / 1111 → F / F → FF.

손으로 계산하면 자릿수가 많아질수록 실수가 나기 쉽다. 온라인 진법 변환기에 숫자를 하나 입력하면 2진수, 8진수, 10진수, 16진수가 동시에 표시되니까 검증 용도로 쓰기에도 좋다. 2~36진법까지 사용자 정의 변환도 되고, 문자를 입력하면 ASCII 코드도 확인할 수 있다.

진법 변환은 원리만 이해하면 어렵지 않다. 다만 시험이나 코딩 중에 빠르게 확인해야 할 때는 도구를 쓰는 게 시간 절약 면에서 확실히 낫다.