유틸리티

진법 변환, 2진수 8진수 10진수 16진수 바꾸는 법

프로그래밍 수업에서 "10진수 255를 2진수로 바꿔보세요"라는 문제가 나온다. 손으로 나눗셈을 반복하면 되긴 하지만, 자릿수가 커지면 중간에 실수하기 쉽다. 실무에서도 메모리 주소를 읽거나 색상 코드를 다룰 때 16진수와 10진수를 오가는 일이 잦다.

2진수, 8진수, 10진수, 16진수 차이

진법사용하는 숫자표기 예시 (10진수 255)주요 사용처
2진수0, 111111111컴퓨터 내부 데이터 처리
8진수0~7377유닉스 파일 권한(chmod)
10진수0~9255일상 숫자, 수학
16진수0~9, A~FFF색상 코드, 메모리 주소

컴퓨터는 모든 데이터를 2진수(0과 1)로 처리한다. 그런데 2진수는 자릿수가 너무 길어서 사람이 읽기 불편하다. 그래서 2진수 4자리를 16진수 1자리로 묶어서 표현하는 방식이 쓰인다. 11111111(2진수 8자리)이 FF(16진수 2자리)가 되는 식이다.

손으로 변환하는 원리

10진수 → 2진수

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

  1. 13 / 2 = 6 ... 나머지 1
  2. 6 / 2 = 3 ... 나머지 0
  3. 3 / 2 = 1 ... 나머지 1
  4. 1 / 2 = 0 ... 나머지 1

결과: 13(10진수) = 1101(2진수). 원리는 간단한데, 숫자가 커지면 나눗셈 횟수가 급격히 늘어난다.

2진수 → 16진수

2진수를 오른쪽부터 4자리씩 묶고, 각 묶음을 16진수 한 자리로 바꾸면 된다. 1101 0011이면 D(1101)와 3(0011)을 합쳐 D3이 된다.

온라인으로 바로 변환하기

손 계산이 번거롭다면 진법 변환기에 숫자 하나만 입력하면 2진수, 8진수, 10진수, 16진수가 동시에 표시된다. 2~36진법까지 사용자 정의 변환도 가능하고, 문자를 넣으면 ASCII 코드 값도 확인할 수 있다.

TIP 16진수를 입력할 때 A~F는 대소문자 구분 없이 인식된다. ffFF는 같은 값(10진수 255)이다.

실무에서 진법이 쓰이는 곳

  • 웹 색상 코드#FF5733은 16진수다. FF=빨강 255, 57=초록 87, 33=파랑 51
  • 네트워크 IP — 서브넷 마스크 255.255.255.0은 2진수로 쓰면 앞 24비트가 1인 구조
  • 파일 권한 — 리눅스에서 chmod 755의 7은 8진수(rwx=111=7)
  • 유니코드 — 한글 "가"의 유니코드는 U+AC00(16진수), 10진수로는 44032
  • 디버깅 — 메모리 덤프에서 주소와 값이 16진수로 표시된다

진법 변환은 원리를 한 번 이해하면 어렵지 않다. 다만 실무에서 속도가 중요할 때는 직접 계산하기보다 도구를 쓰는 게 실수도 줄이고 시간도 아낀다.