진법 변환기

한 곳에 입력하면 2진수·8진수·10진수·16진수가 동시에 변환됩니다. 큰 수와 음수도 정확히 처리하고, 2~36진법 사이 변환은 풀이 과정까지 보여 드립니다.

0b, 0o, 0x 접두사와 공백·밑줄(_)은 자동으로 무시합니다. 앞에 -를 붙이면 음수로 처리합니다.

임의 진법 변환 (2~36진법) + 풀이 과정

진법이란? 자릿값으로 읽는 방법

진법(進法)은 숫자 하나가 몇 가지 값을 가질 수 있는지(기수, base)에 따라 자리마다 값이 몇 배씩 커지는지를 정하는 규칙입니다. 우리가 쓰는 10진수에서 "253"은 2×10² + 5×10¹ + 3×10⁰입니다. 2진수 "1101"도 똑같이 읽습니다. 1×2³ + 1×2² + 0×2¹ + 1×2⁰ = 8 + 4 + 0 + 1 = 13입니다. 즉 어떤 진법이든 "각 자리의 숫자 × 기수의 자리 거듭제곱"을 모두 더하면 10진수 값이 됩니다. 이 도구의 풀이 과정에서 보여 주는 "자릿값 전개"가 바로 이 계산입니다.

반대로 10진수를 N진수로 바꾸려면 N으로 계속 나누어 나머지를 아래에서 위로 읽습니다. 13을 2로 나누면 몫 6 나머지 1, 6÷2는 몫 3 나머지 0, 3÷2는 몫 1 나머지 1, 1÷2는 몫 0 나머지 1이므로 나머지를 거꾸로 읽은 1101이 됩니다. 나머지가 거꾸로 나오는 이유는 가장 먼저 구해지는 나머지가 가장 낮은 자리(1의 자리)이기 때문입니다.

0~16 진법 대조표

10진수2진수8진수16진수
00000000
10000111
20001022
30001133
40010044
50010155
60011066
70011177
801000108
901001119
100101012A
110101113B
120110014C
130110115D
140111016E
150111117F
16100002010

16진수 한 자리는 2진수 4비트(니블)와 정확히 대응하고, 8진수 한 자리는 3비트와 대응합니다. 그래서 2진수 → 16진수 변환은 계산 없이 4자리씩 끊어 위 표에서 찾으면 됩니다. 예를 들어 1011 0101을 끊으면 B와 5이므로 B5입니다. 반대로 16진수 한 자리를 4비트로 펼치면 2진수가 됩니다.

왜 컴퓨터는 2진수를 쓰나요?

컴퓨터 회로는 전압이 높은지 낮은지, 전류가 흐르는지 아닌지처럼 구분이 분명한 두 상태를 가장 안정적으로 다룰 수 있어 0과 1의 2진수를 기본으로 사용합니다. 다만 2진수는 자릿수가 길어 사람이 읽기 어렵습니다. 그래서 메모리 주소, 오류 코드, 색상 코드는 4비트를 한 글자로 줄이는 16진수로, 유닉스 파일 권한은 3비트를 한 글자로 줄이는 8진수로 적습니다. 1,000은 2진수로 1111101000(10자리), 8진수로 1750, 16진수로 3E8로 점점 짧아집니다.

2의 거듭제곱 표

빌드 시 BigInt로 계산한 값이라 2⁵³ 이상에서도 정확합니다.

지수10진수16진수
2^011
2^122
2^244
2^388
2^41610
2^53220
2^66440
2^712880
2^8256100
2^101,024400
2^124,0961000
2^1665,53610000
2^201,048,576100000
2^2416,777,2161000000
2^312,147,483,64880000000
2^324,294,967,296100000000
2^539,007,199,254,740,99220000000000000
2^639,223,372,036,854,775,8088000000000000000
2^6418,446,744,073,709,551,61610000000000000000

2⁸ = 256은 1바이트가 표현하는 값의 개수(0~255), 2¹⁶ = 65,536은 포트 번호의 개수(0~65535), 2³²는 IPv4 주소의 전체 개수입니다. 2⁵³은 자바스크립트 숫자가 정수를 정확히 표현할 수 있는 한계(2⁵³ − 1 = 9,007,199,254,740,991)와 관련되어 있어, 이 변환기는 그보다 큰 수에서도 틀리지 않도록 BigInt로 계산합니다.

음수와 2의 보수

컴퓨터는 음수를 대부분 2의 보수로 저장합니다. n비트에서 −x는 2ⁿ − x로 표현합니다. 8비트에서 −1은 256 − 1 = 255 = 11111111(16진수 FF)이고, −128은 10000000(80), +127은 01111111(7F)입니다. 따라서 8비트 부호 있는 정수의 범위는 −128~127이고, 같은 비트 패턴 FF가 부호 없는 정수로는 255, 부호 있는 정수로는 −1을 뜻합니다. 위 도구에 음수를 넣으면 8·16·32·64비트에서의 2의 보수 표현을 보여 주는데, 해당 비트 폭의 범위를 벗어나는 수는 그 줄이 표시되지 않습니다.

실무 활용: 색상 코드와 chmod

웹 색상 #FF8800은 R=FF, G=88, B=00을 이어 쓴 것으로 10진수로는 R 255, G 136, B 0입니다(0x88 = 8×16 + 8 = 136). 파일 권한 755는 8진수로 읽는 값이며 각 자리가 3비트(읽기 r=4, 쓰기 w=2, 실행 x=1)의 합입니다.

8진수2진수권한
0000---
1001--x
2010-w-
3011-wx
4100r--
5101r-x
6110rw-
7111rwx

예를 들어 chmod 755는 소유자 7(rwx), 그룹 5(r-x), 기타 5(r-x)로 rwxr-xr-x이며 2진수로는 111 101 101입니다. chmod 644는 소유자만 쓸 수 있고 나머지는 읽기만 가능한 rw-r--r--입니다.

검산된 계산 예시

  1. 2진수 → 10진수: 10110101₂ = 128 + 32 + 16 + 4 + 1 = 181, 16진수로는 B5입니다(1011=B, 0101=5).
  2. 16진수 → 10진수: 1F4₁₆ = 1×256 + 15×16 + 4 = 500입니다.
  3. 8진수 → 2진수: 755₈ = 111 101 101₂입니다. 각 자리를 3비트로 펼치면 됩니다.
  4. 36진수: ZZ₃₆ = 35×36 + 35 = 1,295이고, 반대로 3,000은 36으로 나누면 83 나머지 12(C), 83 ÷ 36은 2 나머지 11(B)이므로 2BC₃₆입니다.
  5. 큰 수: 9,007,199,254,740,993은 16진수로 20000000000001입니다. 일반 자바스크립트 숫자로 계산하면 마지막 자리가 ...992로 틀리게 나오는 구간이며, 이 도구는 BigInt를 써서 정확히 변환합니다.

흔한 실수와 한계

결과를 활용하는 방법

자주 묻는 질문

음수나 소수점도 변환할 수 있나요?

음수는 변환할 수 있으며, 앞에 -를 붙이면 됩니다. 8·16·32·64비트 2의 보수 표현도 함께 표시됩니다. 소수점은 지원하지 않고 정수만 처리합니다.

36진법까지 지원하는 이유는 무엇인가요?

36진법은 0~9와 A~Z(10~35)를 모두 사용하는, 알파벳과 숫자만으로 표현할 수 있는 가장 큰 진법입니다. URL 단축이나 일련번호 생성 등에서 자주 쓰여 함께 지원합니다.

아주 큰 수도 정확하게 변환되나요?

네. 일반 자바스크립트 숫자는 약 9×10¹⁵(2⁵³)을 넘으면 정수가 부정확해지지만, 이 도구는 BigInt로 계산하여 자릿수 제한 없이 정확하게 변환합니다. 다만 수천 자리 이상의 입력은 브라우저가 느려질 수 있습니다.

0x나 0b가 붙은 값을 그대로 넣어도 되나요?

해당 진법 칸에서 0x(16진수), 0b(2진수), 0o(8진수) 접두사는 자동으로 제거합니다. 공백과 밑줄도 무시합니다(예: 1111_0000).

16진수 한 글자는 왜 4비트인가요?

16 = 2⁴이기 때문입니다. 16진수 한 자리는 0~15, 곧 4비트가 표현하는 16가지 값과 일대일로 대응합니다. 같은 이유로 8진수 한 자리는 3비트, 32진수 한 자리는 5비트에 대응합니다.

2의 보수 표현에서 보이지 않는 비트 폭이 있는 이유는?

값이 그 비트 폭의 범위를 벗어나면 표현할 수 없기 때문입니다. 예를 들어 200은 8비트 부호 있는 정수(−128~127)로 표현할 수 없어서 8비트 줄은 숨기고 16비트부터 보여 줍니다.

함께 보면 좋은 도구

이 도구는 학습과 개발 참고용입니다. 암호화·보안 목적의 값은 반드시 검증된 라이브러리와 공식 규격으로 확인하세요.