본문 바로가기

진법 변환기 - 2진수, 8진수, 10진수, 16진수 변환 원리와 방법 총정리

컴퓨터가 사용하는 2진수부터 일상의 10진수, 프로그래밍의 16진수까지 각 진법의 원리, 수동 변환 방법, 실무 활용 사례를 상세히 안내합니다.


진법 변환기란?

우리가 일상에서 사용하는 숫자 체계는 10진법(0~9)이지만, 컴퓨터 내부에서는 2진법(0, 1)으로 모든 데이터를 처리합니다. 프로그래밍에서는 16진법(0~F)이 메모리 주소나 색상 코드를 표현하는 데 널리 쓰이고, 리눅스 파일 권한 설정에서는 8진법(0~7)이 사용됩니다.

진법 변환기는 2진수, 8진수, 10진수, 16진수 간 상호 변환을 자동으로 수행해주는 온라인 도구입니다. 숫자를 입력하면 나머지 모든 진법의 값이 실시간으로 계산되어 표시됩니다. 컴퓨터 과학 학습, 프로그래밍, 네트워크 설정, 디버깅 등 다양한 상황에서 활용됩니다.

별도의 프로그램 설치 없이 웹 브라우저에서 바로 사용할 수 있으며, 큰 숫자(64비트 이상)도 정확하게 변환합니다.

진법 체계 상세 설명

2진수 (Binary, 기수 2)

2진수는 0과 1 두 개의 숫자만 사용하는 체계입니다. 컴퓨터의 모든 데이터는 궁극적으로 2진수로 표현되고 처리됩니다. 트랜지스터의 "켜짐(1)"과 "꺼짐(0)" 두 상태로 정보를 저장하기 때문입니다. 2진수의 각 자리를 "비트(bit)"라고 하며, 8비트가 모여 1바이트(byte)를 구성합니다.

예: 10진수 42를 2진수로 표현하면 101010입니다. 이는 32(2⁵) + 8(2³) + 2(2¹) = 42를 의미합니다.

8진수 (Octal, 기수 8)

8진수는 0부터 7까지의 숫자를 사용합니다. 2진수 3자리가 8진수 1자리에 정확히 대응하므로, 긴 2진수를 간결하게 표현하는 데 유용합니다. 리눅스/유닉스 시스템에서 파일 권한을 설정할 때 8진수가 표준으로 사용됩니다.

예: "chmod 755"에서 7은 rwx(읽기+쓰기+실행=4+2+1), 5는 r-x(읽기+실행=4+0+1)를 의미합니다.

10진수 (Decimal, 기수 10)

10진수는 0부터 9까지의 숫자를 사용하는 우리가 일상에서 사용하는 숫자 체계입니다. 인류가 10개의 손가락을 가진 것에서 유래했다고 알려져 있습니다. 컴퓨터 과학에서는 사람이 읽기 쉬운 입출력 형태로 사용되며, 내부적으로는 2진수로 변환되어 처리됩니다.

16진수 (Hexadecimal, 기수 16)

16진수는 0~9와 A(10)~F(15)까지 16개의 기호를 사용합니다. 2진수 4자리가 16진수 1자리에 대응하므로, 바이트(8비트)를 16진수 2자리로 간결하게 표현할 수 있습니다. 프로그래밍에서 접두어 "0x"를 붙여 0xFF처럼 표기합니다.

예: 10진수 255는 16진수로 FF이며, 2진수로는 11111111(8비트)입니다. 메모리 주소 0x7FFF는 10진수 32767을 의미합니다.

진법별 숫자 대응표

10진수2진수8진수16진수
0000000
5010155
10101012A
15111117F
16100002010
100110010014464
25511111111377FF
1024100000000002000400

수동 변환 방법 (원리 이해)

10진수 → 2진수 변환

10진수를 2로 계속 나누면서 나머지를 기록하고, 마지막에 나머지를 역순으로 읽으면 됩니다. 예를 들어 42를 변환하면: 42÷2=21 나머지 0, 21÷2=10 나머지 1, 10÷2=5 나머지 0, 5÷2=2 나머지 1, 2÷2=1 나머지 0, 1÷2=0 나머지 1. 역순으로 읽으면 101010이 됩니다.

2진수 → 16진수 변환

2진수를 오른쪽부터 4자리씩 묶고, 각 묶음을 16진수 한 자리로 변환합니다. 예: 10101111₂ → 1010(=A) 1111(=F) → AF₁₆. 4자리가 안 되는 맨 왼쪽 묶음은 앞에 0을 채웁니다.

16진수 → 10진수 변환

각 자릿값에 16의 거듭제곱을 곱하여 합산합니다. 예: FF₁₆ = F×16¹ + F×16⁰ = 15×16 + 15×1 = 240 + 15 = 255₁₀. 진법 변환기를 사용하면 이 과정을 자동으로 수행합니다.

진법 변환기 주요 기능

  • 실시간 다중 변환 — 하나의 진법에 숫자를 입력하면 나머지 모든 진법(2, 8, 10, 16진수)의 값이 동시에 표시됩니다
  • 큰 숫자 지원 — 64비트 이상의 큰 숫자도 정확하게 변환합니다. 일반 계산기로는 처리하기 어려운 큰 값도 문제없습니다
  • 비트 연산 지원 — AND, OR, XOR, NOT 등 비트 단위 논리 연산을 수행하고 결과를 각 진법으로 표시합니다
  • 단계별 풀이 — 변환 과정을 단계별로 보여주어 진법 변환의 원리를 학습하는 데 도움이 됩니다
  • 2의 보수 표현 — 음수를 2의 보수로 표현한 값도 확인할 수 있어 프로그래밍에서 정수 오버플로우 문제를 이해하는 데 유용합니다
  • ASCII/유니코드 변환 — 문자를 해당하는 숫자 코드로, 숫자 코드를 문자로 변환합니다

실무에서 진법이 사용되는 곳

프로그래밍

거의 모든 프로그래밍 언어에서 16진수 리터럴(0xFF)이 사용됩니다. 색상 코드(#FF6F0F), 비트 마스크(0x0F), 메모리 주소(0x7FFFFFFF), 파일 매직 넘버(PDF 파일의 시작: 0x25504446) 등에서 16진수가 핵심입니다. 비트 플래그를 다룰 때는 2진수 이해가 필수이며, 비트 시프트(<<, >>), 비트 AND(&), OR(|) 연산은 최적화와 하드웨어 제어에서 자주 사용됩니다.

네트워크 및 보안

IPv4 주소는 10진수(192.168.0.1)로 표현되지만, 서브넷 마스크 계산 시 2진수 이해가 필수입니다. MAC 주소(00:1A:2B:3C:4D:5E)는 16진수로 표현됩니다. 암호학에서 해시값(SHA-256 등)도 16진수 문자열로 출력됩니다.

리눅스 시스템 관리

리눅스 파일 권한은 8진수로 표현됩니다. "chmod 644"에서 6은 rw-(소유자: 읽기+쓰기=4+2), 4는 r--(그룹: 읽기=4), 4는 r--(기타: 읽기=4)를 의미합니다. 이 체계를 이해하려면 8진수와 2진수의 관계(예: 7₈=111₂=rwx)를 알아야 합니다.

하드웨어 및 임베디드

마이크로컨트롤러(Arduino, STM32 등)의 레지스터 설정, GPIO 핀 제어, 센서 데이터 해석 등에서 2진수와 16진수가 직접 사용됩니다. 하드웨어 데이터시트에서 레지스터 값은 대부분 16진수로 표기됩니다.

자주 묻는 질문

Q. 왜 컴퓨터는 10진수가 아닌 2진수를 사용하나요?

컴퓨터의 기본 구성 요소인 트랜지스터는 전기가 흐르는 상태(1)와 흐르지 않는 상태(0) 두 가지만 안정적으로 구분할 수 있습니다. 10가지 전압 레벨을 구분하는 것은 기술적으로 가능하지만 오류율이 높아지고 회로가 복잡해집니다. 2가지 상태만 사용하면 노이즈에 강하고 안정적인 동작이 가능하여, 2진수가 디지털 컴퓨팅의 표준이 되었습니다.

Q. 16진수에서 A~F는 왜 사용하나요?

16진수는 0~15까지 16개의 값을 한 자리로 표현해야 하는데, 10~15를 숫자로 표현하면 두 자리가 되어 혼란이 생깁니다. 이를 해결하기 위해 10=A, 11=B, 12=C, 13=D, 14=E, 15=F로 알파벳을 사용합니다. 대소문자는 구분하지 않으며 0xFF와 0xff는 같습니다.

Q. 2진수를 외우지 않고도 변환할 수 있나요?

2의 거듭제곱(1, 2, 4, 8, 16, 32, 64, 128...)만 기억하면 빠르게 변환할 수 있습니다. 10진수를 2진수로 변환할 때, 큰 2의 거듭제곱부터 빼면서 1과 0을 기록하면 됩니다. 하지만 실무에서는 진법 변환기를 사용하는 것이 빠르고 정확합니다.

Q. 프로그래밍에서 0x, 0b, 0o 접두어의 의미는?

프로그래밍 언어에서 진법을 구분하기 위해 접두어를 사용합니다. 0x는 16진수(0xFF=255), 0b는 2진수(0b1010=10), 0o는 8진수(0o17=15)를 나타냅니다. 접두어 없이 쓰면 10진수로 해석됩니다. JavaScript, Python, C, Java 등 대부분의 언어에서 이 표기법을 지원합니다.

3일 무료체험큰손탐지기, 지금 바로 시작하세요

설치 없이 웹에서 바로 사용 가능 · PC & 모바일 지원

무료체험 시작
카카오톡 상담