진법이란? 자릿값으로 읽는 방법
진법(進法)은 숫자 하나가 몇 가지 값을 가질 수 있는지(기수, 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진수 |
|---|---|---|---|
| 0 | 00000 | 0 | 0 |
| 1 | 00001 | 1 | 1 |
| 2 | 00010 | 2 | 2 |
| 3 | 00011 | 3 | 3 |
| 4 | 00100 | 4 | 4 |
| 5 | 00101 | 5 | 5 |
| 6 | 00110 | 6 | 6 |
| 7 | 00111 | 7 | 7 |
| 8 | 01000 | 10 | 8 |
| 9 | 01001 | 11 | 9 |
| 10 | 01010 | 12 | A |
| 11 | 01011 | 13 | B |
| 12 | 01100 | 14 | C |
| 13 | 01101 | 15 | D |
| 14 | 01110 | 16 | E |
| 15 | 01111 | 17 | F |
| 16 | 10000 | 20 | 10 |
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^0 | 1 | 1 |
| 2^1 | 2 | 2 |
| 2^2 | 4 | 4 |
| 2^3 | 8 | 8 |
| 2^4 | 16 | 10 |
| 2^5 | 32 | 20 |
| 2^6 | 64 | 40 |
| 2^7 | 128 | 80 |
| 2^8 | 256 | 100 |
| 2^10 | 1,024 | 400 |
| 2^12 | 4,096 | 1000 |
| 2^16 | 65,536 | 10000 |
| 2^20 | 1,048,576 | 100000 |
| 2^24 | 16,777,216 | 1000000 |
| 2^31 | 2,147,483,648 | 80000000 |
| 2^32 | 4,294,967,296 | 100000000 |
| 2^53 | 9,007,199,254,740,992 | 20000000000000 |
| 2^63 | 9,223,372,036,854,775,808 | 8000000000000000 |
| 2^64 | 18,446,744,073,709,551,616 | 10000000000000000 |
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진수 | 권한 |
|---|---|---|
| 0 | 000 | --- |
| 1 | 001 | --x |
| 2 | 010 | -w- |
| 3 | 011 | -wx |
| 4 | 100 | r-- |
| 5 | 101 | r-x |
| 6 | 110 | rw- |
| 7 | 111 | rwx |
예를 들어 chmod 755는 소유자 7(rwx), 그룹 5(r-x), 기타 5(r-x)로 rwxr-xr-x이며 2진수로는 111 101 101입니다. chmod 644는 소유자만 쓸 수 있고 나머지는 읽기만 가능한 rw-r--r--입니다.
검산된 계산 예시
- 2진수 → 10진수: 10110101₂ = 128 + 32 + 16 + 4 + 1 = 181, 16진수로는 B5입니다(1011=B, 0101=5).
- 16진수 → 10진수: 1F4₁₆ = 1×256 + 15×16 + 4 = 500입니다.
- 8진수 → 2진수: 755₈ = 111 101 101₂입니다. 각 자리를 3비트로 펼치면 됩니다.
- 36진수: ZZ₃₆ = 35×36 + 35 = 1,295이고, 반대로 3,000은 36으로 나누면 83 나머지 12(C), 83 ÷ 36은 2 나머지 11(B)이므로 2BC₃₆입니다.
- 큰 수: 9,007,199,254,740,993은 16진수로 20000000000001입니다. 일반 자바스크립트 숫자로 계산하면 마지막 자리가 ...992로 틀리게 나오는 구간이며, 이 도구는 BigInt를 써서 정확히 변환합니다.
흔한 실수와 한계
- 16진수의 대소문자: a~f와 A~F는 같은 값입니다. 출력은 대문자로 통일합니다.
- 숫자 0과 알파벳 O, 숫자 1과 소문자 l의 혼동으로 유효하지 않은 값이 되는 경우가 많습니다.
- 진법과 자릿수 범위: 2진수에는 0과 1만, 8진수에는 0~7만 쓸 수 있습니다. 허용되지 않는 문자는 몇 번째 글자가 문제인지 안내합니다.
- 소수점: 이 도구는 정수만 지원합니다. 0.1처럼 소수를 2진수로 바꾸면 순환소수가 되어 부동소수점 오차의 원인이 되지만, 여기서는 다루지 않습니다.
- 문자 인코딩: 진법 변환은 숫자를 다른 표기로 바꿀 뿐 문자 코드(ASCII, 유니코드)의 변환과는 다른 작업입니다. 텍스트 변환은 아래 관련 도구를 쓰세요.
- 2의 보수 표시: 비트 폭을 정하기 전에는 같은 2진 문자열이 여러 값을 뜻할 수 있습니다. 8비트 FF가 255인지 −1인지는 해석 방식에 달려 있습니다.
결과를 활용하는 방법
- 색상 코드나 메모리 주소를 10진수로 바꿔 코드에 쓰거나, 10진수 값을 16진수로 바꿔 디버거와 비교할 수 있습니다.
- 비트 마스크를 설계할 때는 2진수 칸에 값을 넣어 어떤 비트가 켜지는지 확인하세요.
- 수업·시험 문제는 임의 진법 변환의 풀이 과정과 직접 계산한 결과를 비교해 보세요.
- 알파벳을 포함한 짧은 식별자(예: URL 단축 코드)는 36진법으로 표현하면 10진수보다 자릿수가 짧아집니다.
자주 묻는 질문
음수나 소수점도 변환할 수 있나요?
음수는 변환할 수 있으며, 앞에 -를 붙이면 됩니다. 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비트부터 보여 줍니다.
함께 보면 좋은 도구
- 텍스트 2진수·ASCII 변환기 - 문자열을 2진수·코드로
- 색상 변환기 - HEX, RGB, HSL 변환
- 데이터 용량 변환기 - 바이트·KB·MB 단위
- 유니코드 문자 정보 도구 - 코드 포인트 확인
- 텍스트 바이트 계산기 - 문자열이 차지하는 바이트
이 도구는 학습과 개발 참고용입니다. 암호화·보안 목적의 값은 반드시 검증된 라이브러리와 공식 규격으로 확인하세요.