유틸리티

진법 변환 쉽게 이해하기 (2진수·10진수·16진수)

프로그래밍을 배우다 보면 "0xFF"나 "0b1010" 같은 표기를 만난다. 10진수밖에 모르는 상태에서는 암호처럼 보이지만, 원리를 알면 간단하다. 자릿수를 세는 기준이 다를 뿐이다.

진법이란 무엇인가

숫자를 표현할 때 사용하는 기호의 개수가 진법이다. 우리가 평소에 쓰는 10진법은 0~9까지 10개의 기호를 쓰고, 9 다음에 자릿수가 올라간다. 2진법은 0과 1 두 개만 쓰고, 1 다음에 바로 자릿수가 올라간다.

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

16진수에서 A~F가 등장하는 이유는 10 이상의 값을 한 자리에 표현하기 위해서다. A=10, B=11, ... F=15로 대응된다.

어디서 쓰이나

2진수 — 컴퓨터의 언어

컴퓨터는 전기 신호(켜짐/꺼짐)로 동작한다. 0과 1 두 가지 상태뿐이라 모든 데이터를 2진수로 처리한다. 파일 크기가 KB, MB로 표시되는 것도 2진법 기반(1KB = 1024바이트 = 2^10)이다.

16진수 — 색상 코드, 메모리 주소

CSS에서 색상을 지정할 때 #FF5733처럼 쓰는 게 16진수다. 2진수 8자리(1바이트)를 16진수 2자리로 줄여 쓸 수 있어서 가독성이 좋다. 프로그래밍에서 메모리 주소를 표시할 때도 16진수가 표준이다.

8진수 — 리눅스 파일 권한

리눅스에서 chmod 755 같은 명령어를 쓸 때 뒤의 숫자가 8진수다. 7은 2진수 111(읽기+쓰기+실행), 5는 101(읽기+실행)을 의미한다.

변환 원리

10진수 → 2진수

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

13 ÷ 2 = 6 ... 나머지 1
 6 ÷ 2 = 3 ... 나머지 0
 3 ÷ 2 = 1 ... 나머지 1
 1 ÷ 2 = 0 ... 나머지 1
→ 결과: 1101

2진수 → 16진수

2진수를 오른쪽부터 4자리씩 묶으면 16진수 한 자리가 된다.

1111 1111
  F    F
→ 결과: FF

이 과정을 매번 손으로 하면 번거롭다. 진법 변환기에 숫자를 넣으면 2진수, 8진수, 10진수, 16진수가 동시에 나온다. 2~36진법까지 사용자 정의 변환도 지원하고, 문자를 ASCII 코드로 바꾸는 기능도 있다.

TIP 프로그래밍 시험에서 진법 변환 문제가 자주 나온다. 2진수 ↔ 16진수는 4자리 묶기만 기억하면 되고, 10진수 ↔ 2진수는 나누기 2 반복이 전부다. 원리를 익힌 뒤에는 도구로 검산하면 실수를 줄일 수 있다.

진법은 컴퓨터 과학의 기초 중 기초다. 원리 자체는 초등학교 나눗셈 수준인데, 낯선 표기 때문에 어렵게 느껴지는 것뿐이다.