홈
DT

2진수 · 10진수 · 16진수 변환기

2~36진법을 서로 바꾸고 비트 연산과 정수 타입 적합성까지 확인합니다.

이 도구는 100% 브라우저에서 실행됩니다. 입력한 데이터는 서버로 전송되지 않습니다.

같은 수라도 표기하는 진법에 따라 모양이 달라집니다. 10진수 255는 2진수로 11111111, 16진수로 ff 입니다. 색상 코드, 파일 권한, 비트 플래그, 메모리 주소처럼 프로그래밍에서 자주 만나는 값들이 저마다 다른 진법으로 표기되기 때문에 서로 바꿔 보는 일이 잦습니다.

이 도구는 2~36진법을 서로 변환하며, 계산을 BigInt로 처리합니다. 자바스크립트의 일반 숫자는 2^53을 넘으면 정밀도를 잃어서 64비트 정수나 긴 해시 값을 다룰 때 조용히 틀린 답을 내놓는데, BigInt는 자릿수 제한이 없어 아무리 큰 값도 정확합니다.

사용 방법

  1. 입력 진법 정하기 — 위쪽에서 2·8·10·16진법을 바로 고르거나, 드롭다운에서 3진법·36진법 같은 다른 진법을 선택합니다. 입력값에 0x, 0b, 0o 접두사가 붙어 있어도 알아서 걷어내며, 읽기 쉽게 넣은 _ 나 공백도 무시합니다.
  2. 값 입력하기 — 숫자를 입력하면 네 가지 주요 진법의 결과가 즉시 표에 나타납니다. 고른 진법에서 쓸 수 없는 문자가 섞이면 — 예를 들어 2진법에 2 를 넣으면 — 아래에 어떤 문제인지 표시됩니다.
  3. 자릿수 끊어 읽기 — 자릿수 끊어 보기를 켜면 2진수는 4자리씩, 16진수는 2자리씩 공백으로 나눠 보여 줍니다. 11111111 보다 1111 1111 이 훨씬 읽기 쉽고, 16진수를 바이트 단위로 셀 때도 편합니다. 복사할 때는 공백 없는 원본이 복사됩니다.
  4. 타입 적합성과 비트 연산 확인 — 값이 int8·uint16·int32 같은 정수 타입에 담기는지 배지로 보여 줍니다. DB 컬럼 타입을 고르거나 오버플로 여부를 확인할 때 참고하세요. 아래 비트 연산 영역에서는 AND·OR·XOR·시프트 결과를 10진수·16진수·2진수로 함께 볼 수 있습니다.

자주 묻는 질문

왜 프로그래밍에서 16진수를 많이 쓰나요?

16이 2의 4제곱이라 16진수 한 자리가 정확히 2진수 네 자리에 대응하기 때문입니다. 변환할 때 계산이 필요 없고 자리별로 그냥 치환하면 됩니다. ff 를 보면 곧바로 1111 1111 임을 알 수 있습니다.

덕분에 1바이트를 항상 두 자리로 깔끔하게 표현할 수 있습니다. 색상 코드 #FF5733 이 빨강·초록·파랑 각 1바이트씩인 것도, 메모리 주소와 해시 값이 16진수로 표기되는 것도 같은 이유입니다. 10진수를 썼다면 바이트 경계가 자릿수와 맞지 않아 훨씬 읽기 어려웠을 것입니다.

큰 숫자를 넣었더니 다른 도구와 결과가 다릅니다.

상대 도구가 자바스크립트의 일반 숫자로 계산하고 있을 가능성이 큽니다. 자바스크립트의 Number는 배정밀도 부동소수점이라 2^53(9,007,199,254,740,992)을 넘는 정수는 정확히 표현하지 못하고 가장 가까운 값으로 반올림됩니다.

이 도구는 BigInt로 계산하므로 자릿수와 무관하게 정확합니다. 64비트 정수 ID, 긴 해시 값, 큰 비트마스크를 다룰 때 결과가 갈린다면 이쪽이 맞다고 보시면 됩니다.

음수는 어떻게 처리되나요?

앞에 - 를 붙여 입력하면 각 진법에서도 부호를 붙여 표기합니다. 수학적으로 정확한 표현입니다.

다만 컴퓨터 메모리에는 - 기호가 저장되지 않고 2의 보수 형태로 담깁니다. 음수를 입력하면 8·16·32비트 각각에서 실제 비트 패턴이 어떻게 되는지 함께 보여 주는 이유입니다. 예를 들어 -1은 8비트에서 1111 1111 이 됩니다. 저수준 코드를 디버깅하거나 바이너리 프로토콜을 분석할 때 이 표현이 필요합니다.

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

숫자 10개와 알파벳 26개를 합치면 36이라, 대소문자를 구분하지 않는 환경에서 쓸 수 있는 최대 진법이 36입니다. 자바스크립트의 toString(36) 도 여기까지만 지원합니다.

실무에서는 짧은 ID를 만들 때 씁니다. 큰 수를 36진법으로 바꾸면 자릿수가 크게 줄어들어, 예를 들어 타임스탬프를 36진법으로 표기하면 8자 정도로 짧아집니다. URL 단축이나 주문번호처럼 짧으면서 사람이 읽을 수 있는 식별자가 필요할 때 유용한 기법입니다.

알아두면 좋은 개념

2의 보수가 뺄셈을 없앤다

컴퓨터가 음수를 2의 보수로 저장하는 이유는 뺄셈 회로를 따로 만들지 않아도 되기 때문입니다. 8비트에서 -1은 1111 1111 인데, 여기에 1을 더하면 1 0000 0000 이 되고 9번째 비트가 버려져 0000 0000 즉 0이 됩니다. 덧셈 회로 하나로 뺄셈이 처리됩니다.

부작용도 있습니다. 표현 범위가 대칭이 아니라서 int8의 범위는 -128~127입니다. -128의 부호를 뒤집으면 128인데 int8에 담기지 않아 다시 -128이 되는, 유명한 오버플로 버그의 원인입니다.

비트 플래그와 마스킹

여러 개의 참/거짓 설정을 정수 하나에 담는 기법입니다. 각 비트에 의미를 부여하고 OR로 켜고, AND로 확인하고, XOR로 뒤집습니다. 유닉스 파일 권한 755 가 대표적인 예로, 8진수 각 자리가 읽기(4)·쓰기(2)·실행(1) 비트의 조합입니다.

데이터베이스에 사용자 권한 같은 것을 저장할 때도 쓰입니다. 컬럼 하나로 32가지 설정을 담을 수 있고 비교도 빠릅니다. 다만 나중에 어떤 비트가 무슨 의미였는지 알아보기 어려워지므로, 설정 수가 적고 자주 바뀌지 않을 때만 쓰는 편이 좋습니다.

시프트 연산과 곱셈의 관계

왼쪽 시프트 x << n 은 x에 2^n을 곱한 것과 같고, 오른쪽 시프트는 나눈 것과 같습니다. 10진수에서 자릿수를 옮기면 10배가 되는 것과 같은 원리입니다.

예전에는 곱셈보다 시프트가 훨씬 빨라서 최적화 기법으로 쓰였지만, 요즘 컴파일러는 x * 8 을 알아서 시프트로 바꿔 줍니다. 그래서 성능 때문에 직접 시프트를 쓸 이유는 거의 없고, 오히려 의도가 드러나지 않아 읽기 어려워집니다. 시프트는 비트를 다루는 것이 실제 의도일 때 — 플래그 위치를 옮기거나 바이트를 조립할 때 — 쓰는 것이 맞습니다.

함께 쓰면 좋은 도구

최종 업데이트: 2026-08-13