유틸리티

2진수 10진수 16진수 변환, 원리와 빠른 계산법

프로그래밍 수업에서 "255를 2진수로 바꿔보세요"라는 문제가 나왔다. 나누기를 반복해서 풀 수는 있는데, 시험장에서 손으로 계산하면 실수하기 쉽고 시간도 오래 걸린다. 진법 변환은 원리만 이해하면 패턴이 보이기 시작한다.

진법이란

숫자를 표현하는 체계다. 우리가 일상에서 쓰는 건 10진법(0~9), 컴퓨터가 내부에서 쓰는 건 2진법(0, 1)이다.

진법사용 숫자주요 용도
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

같은 원리로 10진수를 8이나 16으로 나누면 8진수, 16진수로 변환할 수 있다.

2진수 → 10진수 변환

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

예시: 1101을 10진수로
1×2³ + 1×2² + 0×2¹ + 1×2⁰
= 8 + 4 + 0 + 1 = 13

16진수가 프로그래밍에서 많이 쓰이는 이유

2진수 4자리가 16진수 1자리와 정확히 대응하기 때문이다.

2진수16진수10진수
000000
010155
1010A10
1111F15
1111 1111FF255

255를 2진수로 쓰면 11111111(8자리)이지만, 16진수로 쓰면 FF(2자리)로 훨씬 간결하다. 메모리 주소나 색상 코드처럼 긴 2진수를 다룰 때 16진수가 편한 이유다.

자주 쓰는 변환 값 외우기

  • 255 = FF(16) = 11111111(2) → 1바이트 최대값
  • 256 = 100(16) = 100000000(2) → 색상 채널 범위 (0~255)
  • 1024 = 400(16) = 10000000000(2) → 1KB
  • 65535 = FFFF(16) → 2바이트(16비트) 최대값

빠르게 변환하려면

시험 문제가 아니라 실무에서 필요한 거라면 손으로 나누기를 할 이유가 없다. 진법 변환기에 아무 진법의 값을 넣으면 2진수, 8진수, 10진수, 16진수가 동시에 표시된다. 2~36진법 사이의 사용자 정의 변환도 가능하고, ASCII 문자의 코드값도 확인할 수 있다.

진법 변환의 원리는 "나누고 나머지를 읽는 것" 하나다. 원리를 한 번 이해하면 몇 진법이든 같은 방식으로 접근할 수 있다.