2진수·16진수 완전 가이드:진법의 원리, 변환 방법과 프로그래밍 활용

컴퓨터 세계 곳곳에 진법이 숨어 있습니다. CSS의 #1A2B3C, 메모리 주소 0x7FFFFFFF, Base64 인코딩, URL의 %20…… 이 모든 신비로워 보이는 문자열 뒤에는 하나의 개념——진법(Number Systems)——이 있습니다. 이를 이해하면 더 많은 기술 원리를 읽어낼 수 있습니다.

1. 진법이란?

진법은 "숫자를 표현하는 데 몇 종류의 기호를 쓰는가"에 관한 규칙입니다. 우리가 일상에서 쓰는 10진법(Base-10)은 0~9의 10가지 기호를 사용하고, 9 다음에 자리올림이 발생해 10이 됩니다.

  • 2진법(Base-2):0과 1만 사용. 1 다음에 자리올림이 발생해 10이 됨(10진법의 2를 의미)
  • 8진법(Base-8):0~7 사용, 7 다음에 자리올림
  • 16진법(Base-16):0~9에 A~F(A=10, …, F=15)를 추가 사용, F 다음에 자리올림
10진수2진수8진수16진수
0000000
81000108
10101012A
15111117F
16100002010
25511111111377FF

2. 2진수(Base-2)

2진수는 컴퓨터 하드웨어의 언어입니다. 전기 회로에는 "통전"과 "차단" 두 가지 상태만 존재하며, 이것이 각각 1과 0에 대응합니다. 0 또는 1 한 자리를 비트(bit), 8비트를 묶은 것을 바이트(byte)라 합니다.

10진수 → 2진수 변환

방법:2로 반복해서 나누고 나머지를 아래에서 위로 읽습니다.

13 ÷ 2 = 6 나머지 1  ↑
 6 ÷ 2 = 3 나머지 0  ↑
 3 ÷ 2 = 1 나머지 1  ↑
 1 ÷ 2 = 0 나머지 1  ↑
결과:1101(10진수 13 = 2진수 1101)

2진수 → 10진수 변환

방법:각 자리에 2의 거듭제곱을 곱해 합산합니다.

1101 = 1×2³ + 1×2² + 0×2¹ + 1×2⁰
     = 8 + 4 + 0 + 1
     = 13
실제 활용:파일의 checksum(SHA-256 등)은 내부적으로 비트 연산을 수행하며, 출력되는 긴 16진수 문자열은 2진수 해시 값의 16진수 표현입니다. Checksum 도구로 파일 해시를 생성해 무결성을 검증해 보세요.

3. 16진수(Base-16)

16진수는 프로그래밍에서 가장 흔히 쓰이는 진법입니다. 2진수와 완벽한 대응 관계가 있기 때문입니다:4비트가 정확히 16진수 한 자리에 대응합니다.

2진수:1111 1010 1011 1100
16진수:   F    A    B    C  → FABC

CSS 색상 코드 예시

#FF5733은 세 쌍의 16진수로 각각 R(빨강)·G(초록)·B(파랑)를 나타냅니다:

색상16진수10진수(0–255)
빨강(R)FF255
초록(G)5787
파랑(B)3351

#FF5733rgb(255, 87, 51)과 동일하며, 주황빛 빨강 계열의 색상입니다.

4. URL 인코딩의 16진수

URL에 사용할 수 있는 문자는 제한되어 있어, 허용되지 않는 문자(공백, 한글, 특수 기호 등)는 퍼센트 인코딩(Percent Encoding)으로 표현해야 합니다. 문자의 UTF-8 바이트를 16진수로 변환하고 앞에 %를 붙입니다.

원래 문자URL 인코딩설명
공백%2016진수 20 = 10진수 32(공백의 ASCII 코드)
/%2F경로 이외에서 슬래시 사용 시
%ED%95%9CUTF-8으로 3바이트
지금 바로 시도:한글이나 특수 문자가 포함된 URL을 URL 인코딩 도구에 붙여넣으면 각 문자의 16진수 인코딩을 실시간으로 확인할 수 있습니다.

5. Base64:자주 사용되는 인코딩 방식

Base64는 진법이 아니라 이진 데이터를 출력 가능한 텍스트로 변환하는 인코딩 방식입니다. 3바이트(24비트)를 4그룹의 6비트로 나누고, 각 그룹을 64개 문자(A–Z, a–z, 0–9, +, /) 중 하나에 대응시킵니다.

원본(ASCII):Man
2진수:01001101 01100001 01101110
6비트 분할:010011 010110 000101 101110
Base64:       T      W      F      u  → TWFu

Base64 출력은 원래 데이터보다 약 33% 커지지만, 텍스트만 지원하는 채널(이메일, HTML 속성, JSON)에서 이진 데이터를 안전하게 전송할 수 있습니다.

지금 인코딩하기:임의의 텍스트나 파일 내용을 Base64 인코딩 도구에 입력해 인코딩 결과와 복원을 실시간으로 확인하세요.

6. 각 언어에서의 진법 표기

언어2진수8진수16진수
Python0b10100o120xA
JavaScript0b10100o120xA
C / C++—(네이티브 문법 없음)0120xA
Java0b10100120xA
CSS#FF5733

정리

진법은 어려운 이론이 아니라 많은 일상적인 기술을 이해하는 열쇠입니다:

  • 2진수는 컴퓨터 저층의 언어이자 비트 연산의 기초
  • 16진수는 프로그래밍의 공통어. 색상 코드·메모리 주소·해시 값 모두 16진수로 표현됨
  • Base64는 2진수를 기반으로 텍스트 환경에서의 이진 데이터 전송 문제를 해결함
  • URL 인코딩은 허용되지 않는 문자를 16진수로 표기해 URL에 임의의 문자를 포함 가능하게 함

이러한 기초를 이해하면 %ED%95%9C·#FF5733·TWFu 같은 문자열을 보는 순간 그 의미를 바로 파악할 수 있습니다.