진법 변환 도구
2진수, 8진수, 10진수, 16진수 및 사용자 정의 진수를 즉시 변환
입력 진수
진수 변환이란?
진수 변환은 숫자를 한 수 체계에서 다른 수 체계로 변환하는 과정입니다. 일반적인 진수로는 2진수(진법2), 8진수(진법8), 10진수(진법10), 16진수(진법16)가 있습니다.
컴퓨터 과학에서 2진수는 컴퓨터 내부의 모든 데이터가 이진수로 저장되기 때문에 가장 기본적인 수 체계입니다. 16진수는 메모리 주소와 색상 값을 나타내는 데 널리 사용됩니다. 8진수는 Unix 파일 권한 등에서 사용됩니다.
사용 방법
사용 방법
- 입력 필드에 변환할 숫자를 입력하세요 (예: 255, FF, 11111111)
- 입력 숫자의 진법을 선택하세요: 이진법, 팔진법, 십진법, 십육진법 또는 사용자 정의 진법
- 도구가 입력을 자동으로 이진법, 팔진법, 십진법, 십육진법으로 변환합니다
- 결과 옆의 '복사' 버튼을 클릭하여 클립보드에 복사하세요
변환 팁
- 선택한 진법에 유효한 숫자인지 확인하세요. 예를 들어 이진법은 0과 1만 허용하고, 십육진법은 0-9와 A-F를 허용합니다.
- 큰 정수는 일부 작업에서 JavaScript의 안전한 숫자 범위를 초과할 수 있으므로, 중요한 엔지니어링 값은 임의 정밀도 도구로 검증하세요.
활용 사례
기술 원리
진법 변환은 위치 표기법 연산입니다. 진법 b의 위치 p에 있는 숫자 d는 총값에 d x bᵖ를 기여하며, N자리 수의 값은 Σᵢ₌₀..N₋₁ dᵢ x b^(N-1-i)입니다. 10진법은 진법 10, 2진법은 진법 2, 8진법은 진법 8, 16진법은 진법 16입니다. 두 가지 알고리즘이 모든 작업을 수행합니다: 진법 b₁에서 10진법으로 변환하려면 다항식을 평가합니다(Horner 방법이 표준적인 인플레이스 형태입니다: `value = value * b₁ + digit`). 10진법에서 진법 b₂로 변환하려면 b₂로 반복 나눗셈한 뒤 나머지를 모아서 역순으로 읽습니다. 두 알고리즘 모두 자릿수당 O(N), 추가 공간은 O(1)이며, 2부터 36까지의 모든 진법에서 작동합니다(숫자 '0'-'9' + 'A'-'Z'가 10-35를 나타냄). 대부분의 실용적인 진법 변환 작업은 중간 10진 단계를 건너뛰고 2의 거듭제곱인 진법 간에 직접 변환합니다. 2진법 ↔ 8진법은 8진수 한 자리당 2진수 3자리를 그룹화하고(2³ = 8이므로), 2진법 ↔ 16진법은 16진수 한 자리당 2진수 4자리를 그룹화합니다(2⁴ = 16이므로). 이것이 0xFF = 11111111₂이고, 0755(8진법, Unix 파일 권한) = 111101101₂ = 10진법 493인 이유입니다. 이 페이지는 Base 32(RFC 4648 §6, 일부 인증 토큰에서 사용)와 Base 36(전통적인 간결한 URL 단축기 알파벳 '0'-'9' + 'A'-'Z')도 처리합니다. 36은 2의 거듭제곱이 아니므로 2진으로의 변환이 유일한 합리적인 방법입니다. 이 페이지는 JavaScript의 내장 parseInt(value, base)를 파싱에, (123).toString(base)를 출력에 사용합니다. 둘 다 Number 정밀도에 제한됩니다: IEEE 754 binary64는 53비트 가수를 가지므로 2⁵³ - 1 = 9,007,199,254,740,991보다 큰 정수 값은 정밀도를 잃습니다. 예를 들어 Number.MAX_SAFE_INTEGER + 1은 Number.MAX_SAFE_INTEGER + 2와 같습니다 — 두 큰 값은 표현할 수 없습니다. 임의 정밀도 정수 진법 변환을 위해 BigInt가 현대적인 방법입니다: BigInt에서 parseInt 스타일 로직은 간단하며, BigInt.prototype.toString(base)는 2부터 36까지의 모든 진법을 처리합니다. 암호화 라이브러리, UUID 생성기, 큰 수 연산(BIP-32 HD 지갑, RSA 키)은 모두 이 이유로 BigInt를 사용합니다. 동일한 알고리즘은 부호 있는 수와 부동소수점도 처리하지만 주의사항이 있습니다. 2의 보수(1965년 IBM System/360 설계부터 모든 현대 CPU에 이르기까지 고정 너비 정수의 주요 부호 있는 표현)에서 -1은 전부 1이며(32비트는 0xFFFFFFFF, 64비트는 0xFFFFFFFFFFFFFFFF), 최상위 비트가 부호 비트입니다. 부호 있는 2의 보수 정수를 10진법으로 변환하려면 2ⁿ(n은 비트 너비)을 뺍니다. 부동소수점의 경우, IEEE 754 binary64는 부호(1비트), 지수(11비트, 바이어스 1023), 가수(52비트, 암묵적 선행 1 포함)를 저장합니다. 따라서 임의의 binary64의 10진 변환은 정확하지 않습니다 — IEEE 754에서 0.1은 0.1000000000000000055511151231257827021181583404541015625이며, 이것이 바로 금융 코드가 float 대신 정수 센트 또는 10진 라이브러리를 사용하는 이유입니다.
- 위치 표기법: 진법 b의 위치 p에 있는 숫자 d는 d x bᵖ를 기여합니다. N자리 수의 전체 값은 Σᵢ dᵢ x b^(N-1-i)입니다. Horner 방법은 O(N) 시간과 O(1) 공간으로 이를 평가합니다: `value = value * b + digit`.
- 10진법에서 진법 b로 변환하려면 b로 반복 나눗셈하고 나머지를 모읍니다; 역순으로 읽으면 목표 표현이 됩니다. N자리 출력에 대해 O(N) 알고리즘입니다.
- 직접 2진법 ↔ 16진법 변환: 16진수 한 자리는 정확히 2진수 4자리이므로 0xFF = 11111111₂. 2진법 ↔ 8진법: 8진수 한 자리는 2진수 3자리이므로 0755 = 111101101₂.
- 2의 보수(모든 현대 CPU가 부호 있는 정수에 사용): 상위 비트가 부호이며, 음수는 2ⁿ - |x|로 인코딩됩니다. 32비트 2의 보수에서 -1은 0xFFFFFFFF입니다.
- IEEE 754 binary64(JavaScript Number): 1비트 부호 + 11비트 바이어스 지수(바이어스 1023) + 암묵적 선행 1이 포함된 52비트 가수. 최대 안전 정수는 2⁵³ - 1 = 9,007,199,254,740,991이며, 이보다 큰 값은 정밀도를 잃습니다.
- parseInt(value, base)와 Number.prototype.toString(base)는 진법 2-36에서 작동하며 53비트 Number 가수를 사용합니다. 임의 정밀도를 위해 BigInt('value', base)와 BigInt.prototype.toString(base)를 사용하세요.
- Base 32(RFC 4648 §6)와 Base 36('0'-'9' + 'A'-'Z')은 32와 36이 2의 거듭제곱이 아니므로 중간 단계로 2진법이 필요합니다 — 한 숫자가 고정된 비트 수에 대응하지 않습니다.
- 엣지 케이스: 음수 진법 또는 2의 보수에서 음수에 대한 나머지가 있는 정수 나눗셈은 부호 처리가 필요합니다. 이 페이지는 입력을 부호 없는 절대값으로 처리하고 최종 결과에 부호를 다시 적용합니다.
예시
10진수에서 16진수로
입력: 255 (10진수)
출력: FF (16진수)
참고: CSS 색상 값에서 자주 사용 (예: 빨간색 #FF0000)2진수에서 10진수로
입력: 11111111 (2진수)
출력: 255 (10진수)
참고: 8비트 2진수의 최댓값, 즉 unsigned 바이트의 최댓값16진수에서 2진수로
입력: 1A3F (16진수)
출력: 1101000111111 (2진수)
참고: 2진수 4자리가 16진수 한 자리에 대응8진수에서 16진수로
입력: 377 (8진수)
출력: FF (16진수)
참고: Unix 권한 377 (rwxrwxrwx)이 16진수 FF에 해당사용자 정의 진법 (36진수)
입력: ZZ (36진수)
출력: 1295 (10진수)
참고: 36진수는 0-9와 A-Z를 사용하며, ZZ는 36진법에서 두 자리로 표현 가능한 최댓값자주 묻는 질문
어떤 진법이 지원되나요?
2진법, 8진법, 10진법, 16진법, 그리고 2부터 36까지 임의의 사용자 지정 진법을 지원합니다. 36보다 큰 진법은 확장 알파벳이 필요하므로 본 도구의 범위에서 제외됩니다.
높은 진법에서는 문자를 어떻게 사용하나요?
10보다 큰 진법은 문자를 사용합니다. 16진법에서는 A=10, B=11, … F=15이고, 36진법에서는 A=10부터 Z=35까지입니다. 입력은 대소문자 모두 허용되며, 출력은 기본적으로 대문자로 표시됩니다.
음수나 소수는 어떻게 변환하나요?
음수 정수는 직접 입력해도 동작합니다. 내부적으로 JavaScript BigInt 또는 부호 있는 정수로 저장됩니다. 소수 값(예: 10진수 0.5 → 2진수 0.1)도 지원되지만, 부동소수점 정밀도 한계로 약 15자리 유효숫자로 제한됩니다.
2의 보수와 부호 절댓값 표현은 어떻게 다른가요?
2의 보수는 컴퓨터가 음의 정수를 표현하는 방식으로, 최상위 비트가 음수를 나타내고 나머지 비트는 값에 오프셋을 더해 인코딩합니다. 부호 절댓값은 단순히 부호 비트만 뒤집습니다. 본 페이지는 일반적으로 부호 절댓값(10진수와 비슷한 부호 표기)을 표시하며, 비트 패턴 자체는 보여주지 않습니다. 2의 보수가 필요하다면 프로그래머 모드 계산기를 사용하세요.
16진수 결과의 패딩이 다른 도구와 다른 이유는 무엇인가요?
16진수 값은 바이트 또는 워드 경계까지 왼쪽 패딩될 수도 있고 그렇지 않을 수도 있습니다. 0xff와 0x000000FF는 같은 값이며 표시되는 패딩만 다를 뿐입니다. 본 페이지는 자동 패딩을 수행하지 않으므로, MAC 주소나 IPv6 세그먼트처럼 고정 너비가 필요한 경우 직접 앞에 0을 추가하세요.
변환 가능한 숫자 크기에 제한이 있나요?
JavaScript BigInt는 임의 크기의 정수를 처리할 수 있어 정수 진법 변환은 사실상 무제한 길이의 숫자에 대해 동작합니다. 소수 변환은 Number의 15~17자리 유효숫자로 제한됩니다.
여기서 IP 주소나 색상 코드도 변환할 수 있나요?
간접적으로 가능합니다. 각 바이트를 따로 변환하세요. 점으로 구분된 IP는 옥텟별로 10진수에서 16진수로 변환하고, #RRGGBB 색상 코드는 세 쌍의 바이트로 나누어 변환합니다. 전용 IP나 색상 도구를 사용하면 파싱까지 알아서 처리됩니다.