진수 변환기 (2진수 · 8진수 · 10진수 · 16진수)

숫자와 그 숫자가 적힌 진수를 넣으면 2·8·10·16진수를 한 번에 보여 줍니다. 음수는 2의 보수 비트 패턴으로, 큰 정수는 자릿수 제한 없이 정확하게 변환합니다. 소수(실수)는 지원하지 않습니다.

0x·0b·0o 접두어가 있으면 진수를 자동 인식합니다. 공백과 _ 는 무시
진수 변환기 (2진수 · 8진수 · 10진수 · 16진수)모두의계산기

진수 변환의 원리

모든 진수는 같은 수를 다른 자릿수 단위로 적는 표기일 뿐입니다. 10진수 255는 16진수로 FF(15×16 + 15), 2진수로 11111111(28−1)입니다. 16은 24이므로 16진수 한 자리가 정확히 2진수 네 자리에 대응하고, 8은 23이므로 8진수 한 자리가 2진수 세 자리에 대응합니다. 그래서 2진수를 4자리씩 묶으면 각 묶음을 16진수 한 글자로 바로 읽을 수 있고, 프로그래머가 긴 비트열 대신 16진수를 쓰는 이유가 이것입니다. 이 도구는 BigInt로 계산하므로 자릿수 제한 없이 정확하며, 입력은 브라우저 밖으로 나가지 않습니다.

음수와 2의 보수

컴퓨터는 부호를 따로 저장하지 않고 고정된 비트 수 안에서 음수를 2의 보수로 표현합니다. n비트에서 −x는 2n − x의 비트 패턴입니다. 예를 들어 8비트에서 −1은 11111111(= 255), −128은 10000000입니다. 최상위 비트가 1이면 음수로 해석됩니다. 같은 비트열이 부호 있는 타입에서는 −1, 부호 없는 타입에서는 255로 읽히는 것이 C/C++·Java의 오버플로 버그의 흔한 원인입니다. 비트 수 옵션을 바꾸면 같은 음수의 패턴이 어떻게 길어지는지 볼 수 있습니다(부호 확장).

자바스크립트의 숫자 한계

일반 Number 타입은 정수를 253(약 9,007조)까지만 정확히 표현합니다. 그보다 큰 값은 parseInttoString(2)에서 끝자리가 뭉개집니다. 64비트 ID, 해시값, 암호 키 같은 값은 반드시 BigInt나 문자열로 다뤄야 하며, 이 도구는 모든 계산을 BigInt로 하기 때문에 수백 자리 숫자도 정확합니다.

실수를 지원하지 않는 이유

0.1 같은 10진 소수는 2진수로 무한소수가 되어 정확히 표현되지 않습니다. 컴퓨터는 IEEE 754 부동소수점 규격으로 근사값을 저장하는데, 그 비트 패턴은 "진수 변환"이라기보다 부호·지수·가수 필드를 해석하는 별개의 주제입니다. 이 도구는 정수만 다루며, 소수점이 들어오면 안내 메시지를 표시합니다.

자주 묻는 질문

0xFF 처럼 접두어를 붙여도 되나요?

네. 0x(16진), 0b(2진), 0o(8진) 접두어가 있으면 선택한 진수와 관계없이 자동 인식합니다. 1,000이나 1_000처럼 쉼표·밑줄로 자릿수를 구분해도 무시하고 읽습니다.

36진수는 어디에 쓰나요?

숫자 10개와 알파벳 26개를 모두 자릿수로 쓰는 가장 짧은 표기입니다. 짧은 URL, 라이선스 키, 일부 DB의 ID 인코딩에 쓰입니다. 대소문자는 구분하지 않습니다.

결과 16진수가 소문자로 필요해요.

복사한 뒤 소문자로 바꾸면 됩니다. 16진수 값은 대소문자에 의미가 없습니다.

함께 보기