Menu

진법 변환기

숫자를 2진수, 8진수, 10진수, 16진수 간에 변환합니다.

마지막 업데이트

비트6
  • 2진수2진수
  • 8진수8진수
  • 10진수10진수
  • 16진수16진수

진법 변환기란?

진법 변환기는 2진수, 8진수, 10진수, 16진수 중 한 가지로 표기된 숫자를 다른 진법으로 다시 써주는 도구입니다. 비트마스크를 읽거나 색상 코드를 디버깅할 때, 프로토콜 패킷의 플래그를 해석하거나 하드웨어 레지스터를 다룰 때, CSS·어셈블리·암호학에서 hex와 decimal을 오갈 때까지 — 개발자라면 늘 필요한 작업입니다.

진법이 바뀐다고 숫자 자체가 바뀌는 건 아니고, *표기 방식*만 달라집니다. 10진수 255는 16진수로 0xFF, 2진수로 0b11111111, 8진수로 0o377. 같은 값을 네 가지 방식으로 적은 것뿐이죠.

요즘 도구라면 큰 수를 다룰 때 정밀도 손실이 없어야 합니다. JavaScript의 일반 parseInt는 2⁵³를 넘는 값을 조용히 반올림해버려서, 64비트 레지스터 값이나 ID, 타임스탬프를 다룰 때 미묘한 버그를 만듭니다. 잘 만든 변환기는 내부적으로 BigInt를 써서 256비트 hex 값까지도 정확하게 왕복 변환합니다.

진법 변환을 하면서 배울 수 있는 것들

  • 2진수는 0, 1 두 자리, 8진수는 8자리, 10진수는 10자리, 16진수는 16자리(0–9, a–f)를 사용합니다.
  • 2진수 한 자리가 1 *비트*입니다. 4비트 = 16진수 1자리, 8비트 = 1바이트 = 16진수 2자리.
  • 16진수는 사실상 2진수를 압축해서 읽는 방법입니다. 0xCAFE는 2진수로 1100 1010 1111 1110 — 한결 보기 편하죠.

단계별 진법 변환 방법

  1. 입력 진법 고르기

    갖고 있는 숫자에 맞춰 2진수, 8진수, 10진수, 16진수 중 하나를 선택합니다.

  2. 값 입력하기

    16진수는 ff0xff도 받습니다. 2진수도 10100b1010 둘 다 인식하고, 접두사는 자동으로 떼어냅니다.

  3. 네 가지 진법을 한눈에 보기

    같은 숫자가 네 가지 진법으로 즉시 표시됩니다. 원하는 표기를 클릭하면 바로 복사돼요.

  4. 자릿수 그룹 표시 켜기

    2진수는 4비트씩(1100 1010 1111 1110), 16진수는 2자씩(CA FE) 묶어 보여줍니다. 비트필드나 메모리 덤프를 살펴볼 때 유용합니다.

진법 빠른 참고표

네 가지 진법에서 자주 쓰는 기준값들. 아래 문법은 JavaScript의 BigInt숫자 리터럴 규칙을 따릅니다.

10진수2진수8진수16진수
0000
1111
81000108
10101012A
16100002010
321000004020
64100000010040
100110010014464
1281000000020080
25511111111377FF
256100000000400100
1024100000000002000400
655351111111111111111177777FFFF

직접 해볼 만한 진법 변환 예제

RGB 색상 코드

16진수
color: #ff8800;
10진수
color: rgb(255, 136, 0);

16진수 두 자리가 채널 하나에 해당하는 1바이트(0–255)입니다. ff = 255, 88 = 136, 00 = 0.

권한 비트마스크 읽기

10진수

5

2진수

0b101

비트 해석

비트 0(read)이 켜져 있고, 비트 2(execute)도 켜져 있습니다. 비트 1(write)은 꺼져 있죠. 따라서 권한은 read + execute입니다.

유닉스 파일 모드(chmod), 기능 플래그, 프로토콜 패킷은 모두 여러 boolean을 정수 하나의 비트들로 인코딩합니다. 2진수로 보면 그 구조가 그대로 보여요.

BigInt로 정밀하게 변환하기

16진수 (아주 큼)

0xFFFFFFFFFFFFFFFF

10진수

18446744073709551615

부호 없는 64비트 정수의 최댓값입니다. JavaScript의 일반 parseInt로는 정밀도가 깨지지만, BigInt를 쓰면 깔끔하게 처리됩니다.

진법 변환에서 자주 하는 실수

  • *숫자*와 *리터럴*을 헷갈리는 경우. 0x1010은 비슷해 보이지만 각각 16과 10입니다 — 코드에서는 항상 진법 접두사를 명시하세요.
  • 16진수를 왼쪽에서 오른쪽으로 읽으면서 메모리 덤프의 바이트 순서(엔디안)를 잊어버리는 실수.
  • JavaScript에서 2⁵³보다 큰 값에 parseInt(big, 16)을 쓰는 경우. BigInt('0x' + hex)를 사용하세요.

진법 변환기 자주 묻는 질문

2진수를 10진수로 어떻게 변환하나요?
오른쪽부터 각 자리에 2의 거듭제곱을 곱해서 더하면 됩니다. 1010이라면 1·8 + 0·4 + 1·2 + 0·1 = 10. 아니면 변환기에 붙여넣어 바로 결과를 확인하세요.
10진수를 16진수로 어떻게 변환하나요?
10진수를 16으로 계속 나누면서 나머지(0–15, 이때 10–15는 A–F로 표기)를 기록합니다. 그 나머지들을 아래에서 위로 읽으면 됩니다. 255 ÷ 16 = 15 나머지 15FF.
16진수는 어디에 쓰이나요?
2진수를 짧고 읽기 쉽게 표현해야 하는 곳이라면 어디든 쓰입니다. 색상 코드(#ff8800), 메모리 주소, 파일 덤프, MAC 주소, 해시, 그리고 대부분의 저수준 시스템에서 사용됩니다.
8진수와 16진수는 뭐가 다른가요?
8진수는 base 8(0–7), 16진수는 base 16(0–9, A–F)입니다. 8진수는 요즘 흔치 않지만, 유닉스 파일 권한(0755)이나 일부 C 계열 숫자 리터럴에서 여전히 등장합니다.
2진수는 왜 그렇게 빨리 커지나요?
자리 수가 하나 늘어날 때마다 표현 가능한 값이 두 배가 되기 때문입니다. 8비트면 256개, 16비트면 65,536개, 32비트면 40억 개가 넘는 값을 표현할 수 있습니다. 비트마스크가 작은 숫자에 그렇게 많은 의미를 담을 수 있는 이유죠.

자세히 알아보기

다른 개발자 도구

Coddy로 코딩 배우기

시작하기