진법 변환기

2진수, 8진수, 10진수, 16진수와 2~36 사이의 모든 진법 간에 숫자를 변환합니다. 아주 큰 수도 정확하게 바꿉니다.

10진수
16진수
2진수
8진수
다른 진법:

2진수, 10진수, 16진수 변환 방법

  1. 가지고 있는 숫자에 맞는 칸에 입력합니다. 10진수, 16진수, 2진수, 8진수 칸이 있고, 다른 진법 칸은 메뉴에서 3진법부터 36진법까지 고른 뒤 씁니다(처음에는 36진법이 선택되어 있습니다).
  2. 입력하는 동안 나머지 칸이 모두 바뀝니다. 방향을 고를 필요 없이 어느 칸이든 입력 칸이 될 수 있습니다.
  3. 필요한 결과 옆의 복사 버튼을 누릅니다. FF보다 ff가 좋다면 대문자로 표시를 끕니다.

입력 칸 아래 줄에는 그 수에 필요한 비트 수와, 이를 올림한 바이트 수가 표시되어 저장 공간 크기를 정할 때 유용합니다. 입력은 너그럽게 받습니다. 0x, 0b, 0o 접두사는 해당 칸에서 받아들이고, 영문자는 대문자든 소문자든 상관없고, 앞에 붙은 마이너스 부호도 되며, 공백·밑줄·쉼표는 무시하므로 1111 0000, 0xDEAD_BEEF, 1,000,000 모두 괜찮습니다. 잘못된 글자가 있으면 2진수 속 “2”처럼 그 글자를 짚어 알려 줍니다.

자리값 기수법의 원리

어떤 진법 b에서든 각 자리는 오른쪽 자리의 b배 값을 가집니다. 10진수 255는 2×100 + 5×10 + 5×1이라는 뜻입니다. 같은 양을 16진수로 쓰면 FF, 즉 15×16 + 15×1입니다. 2진수로는 11111111로, 1이 여덟 개이고 각 자리가 앞 자리의 두 배입니다. 10보다 큰 진법은 남는 숫자를 영문자로 대신해 A = 10부터 Z = 35까지 쓰며, 그래서 이 변환기가 지원하는 가장 큰 진법이 36입니다.

  • 2진수는 하드웨어가 데이터를 저장하는 방식을 그대로 보여 줍니다. 한 자리가 1비트입니다.
  • 8진수는 비트를 세 개씩 묶습니다. 요즘은 주로 유닉스 파일 권한에 남아 있습니다.
  • 16진수는 비트를 네 개씩 묶으므로 1바이트가 언제나 정확히 16진수 두 자리입니다. 그래서 메모리 주소, 바이트 덤프, 해시, 색상 코드를 쓰는 표준 방식이 되었습니다.
  • 36진수는 숫자와 영문자를 모두 써서 짧고 대소문자 구분 없는 ID를 만듭니다. 단축 URL이나 일부 참조 코드에 쓰입니다.

예시

10진수16진수2진수8진수쓰이는 곳
255FF1111 11113771바이트의 최댓값
2561001 0000 00004009비트가 필요해 2바이트
4931ED111 101 101755chmod 755: rwx r-x r-x
3735928559DEADBEEF32비트33653337357디버깅에서 흔히 쓰는 표식 값
16746496FF880024비트77704000색상 #FF8800

권한 예시를 보면 8진수가 유닉스에 잘 맞는 이유를 알 수 있습니다. 8진수 한 자리가 정확히 3비트, 즉 읽기·쓰기·실행이고, 이것이 소유자·그룹·기타 사용자 순으로 놓입니다. 색상 예시에서 FF, 88, 00 세 쌍은 빨강·초록·파랑 바이트 255, 136, 0입니다. 색상 코드 변환기가 이 분해를 대신해 줍니다.

큰 값도 정확합니다. 변환기가 임의 정밀도 정수를 쓰므로 2⁶⁴ − 1 = 18446744073709551615는 반올림 없이 FFFFFFFFFFFFFFFF(64비트, 8바이트)가 됩니다. 많은 계산기와 스프레드시트는 유효 숫자 15~16자리를 넘으면 조용히 자릿수를 잃고, Excel의 DEC2BIN은 −512부터 511 밖의 수를 거부합니다.

손으로 변환하기

10진수 → 2진수: 2로 계속 나누고 나머지를 마지막부터 거꾸로 적습니다. 156이라면 156→78 나머지 0, 78→39 나머지 0, 39→19 나머지 1, 19→9 나머지 1, 9→4 나머지 1, 4→2 나머지 0, 2→1 나머지 0, 1→0 나머지 1이므로 156 = 10011100입니다. 같은 방법이 어느 진법에나 통합니다. 16으로 나누면 16진수 9C가 나옵니다.

16진수 → 10진수: 오른쪽부터 0으로 세는 자리 번호만큼 16을 거듭제곱해 각 자리에 곱하고 더합니다. 2F = 2×16 + 15 = 47입니다.

2진수 → 16진수: 비트를 오른쪽부터 네 개씩 묶어 각 묶음을 바꿉니다. 1001 1100 → 9와 C → 9C. 8진수라면 세 개씩 묶습니다.

음수와 2의 보수

이 변환기는 음수를 마이너스 부호로 씁니다. −42는 16진수로 -2A, 2진수로 -101010입니다. 컴퓨터는 보통 음수를 2의 보수라는 다른 방식으로 저장하며, 그 비트 모양은 저장 칸의 폭에 따라 달라집니다. n비트 칸이라면 2ⁿ을 더한 결과를 변환하면 됩니다. 8비트라면 256 − 42 = 214이므로 D6, 즉 11010110이고, 16비트라면 65536 − 42 = 65494이므로 FFD6입니다. 거꾸로 n비트 값의 맨 앞 비트가 1이면 2ⁿ을 빼서 부호 있는 값을 구합니다. 부호 있는 1바이트로 본 FF는 255 − 256 = −1입니다.

자주 묻는 질문

0.5 같은 소수도 변환할 수 있나요?

아니요, 정수만 됩니다. 소수점은 잘못된 숫자로 표시됩니다. 0.1처럼 많은 10진 소수는 2진수로 유한하게 나타낼 수조차 없으며, 이것이 부동소수점 반올림 오차의 근본 원인입니다.

코드에는 0x가 붙는데 결과에는 왜 없나요?

0x, 0b, 0o는 뒤에 오는 숫자가 어느 진법인지 프로그래밍 언어에 알려 주는 표기일 뿐 숫자의 일부가 아닙니다. 값을 붙여 넣을 때 쓰는 언어에 맞는 접두사를 붙이세요.

어떤 수를 저장하려면 몇 비트가 필요한가요?

상태 줄에 바로 나옵니다. 일반적으로 n비트에는 0부터 2ⁿ − 1까지의 부호 없는 값이 들어가므로, 255는 8비트에 들어가고 256은 9비트가 필요합니다.

36진법의 “10”은 10진수 10과 같나요?

아니요. 36진법에서 10은 1×36이므로 10진수로 36이고, ZZ는 35×36 + 35 = 1295입니다. 숫자를 공유할 때는 어느 진법인지 꼭 밝히세요.