유틸리티

10진수 2진수 16진수 변환, 원리와 빠르게 바꾸는 법

프로그래밍 수업에서 "255를 2진수로 바꿔라"는 문제가 나왔을 때, 나누기를 반복하다가 실수하는 경우가 많다. 진법 변환은 원리 자체는 단순한데, 손으로 하면 자릿수가 늘어날수록 실수가 쌓인다.

진법이란, 왜 여러 종류가 있는가

일상에서 쓰는 숫자는 10진법이다. 0부터 9까지 10개 숫자를 쓴다. 컴퓨터는 전기 신호의 켜짐/꺼짐만 인식하므로 2진법(0과 1)을 쓴다. 16진법은 2진수를 짧게 표기하기 위해 만든 것이다.

진법사용 숫자쓰이는 곳
2진법0, 1컴퓨터 내부 데이터 처리
8진법0~7리눅스 파일 권한 (chmod 755)
10진법0~9일상생활 전반
16진법0~9, A~F색상 코드(#FF0000), 메모리 주소

10진수 → 2진수 변환 원리

10진수를 2로 나누고, 나머지를 아래에서 위로 읽으면 된다.

예시: 13을 2진수로
13 ÷ 2 = 6 ... 나머지 1
6 ÷ 2 = 3 ... 나머지 0
3 ÷ 2 = 1 ... 나머지 1
1 ÷ 2 = 0 ... 나머지 1
→ 아래에서 위로 읽으면: 1101

16진수도 같은 원리인데 2 대신 16으로 나눈다. 나머지가 10 이상이면 A(10), B(11), C(12), D(13), E(14), F(15)로 표기한다.

자주 나오는 변환 값 정리

10진수2진수8진수16진수
0000
10101012A
15111117F
100110010014464
12711111111777F
25511111111377FF

255는 1바이트(8비트)로 표현할 수 있는 최대값이다. 색상 코드에서 RGB 각 채널의 최대값이 255인 이유이기도 하다.

직접 계산하기 귀찮다면

시험이나 과제가 아니라면 직접 나누기를 반복할 필요가 없다. 진법 변환기에 숫자를 입력하면 2진수, 8진수, 10진수, 16진수가 동시에 표시된다. 2~36진법까지 사용자 정의 변환도 되고, 문자를 넣으면 ASCII 코드값도 바로 나온다.

TIP 프로그래밍 언어에서는 접두어로 진법을 구분한다. 0b는 2진수(0b1101), 0o는 8진수(0o15), 0x는 16진수(0xFF). 코드에서 이 접두어를 보면 바로 어떤 진법인지 알 수 있다.

원리를 한 번 이해해두면 진법 변환 문제는 패턴이 보인다. 실무에서는 도구를 쓰면 되고, 시험에서는 나누기만 정확하게 하면 된다.