10진수-16진수 변환기
계산 결과
16진수
- 자릿값
- 2×4096 + 10×256 + 3×16 + 15
10진수를 16진수로 바꾸는 변환기입니다. 10815처럼 정수를 넣으면 16진수 값과 함께, 그 값이 나온 자릿값의 합도 보여 줍니다. 방법은 2진수로 바꿀 때와 같은 나눗셈인데, 나누는 수가 2가 아니라 16입니다. 수를 16으로 나눠 나머지를 적고, 그 몫을 다시 16으로 나누기를 몫이 0이 될 때까지 되풀이합니다. 다른 것은 글자입니다. 2로 나누면 나머지가 0이나 1밖에 나오지 않지만, 16으로 나누면 0부터 15까지 아무 값이나 나옵니다. 16진법은 이 가운데 10부터 15까지를 A부터 F까지의 알파벳으로 적습니다. A가 10, B가 11이고 F가 15입니다. 그래서 나머지를 그대로 이어 붙이면 16진수가 되지 않습니다. 나머지는 숫자로 나오고, 9를 넘는 나머지는 알파벳으로 바꿔 적어야 비로소 답이 완성됩니다. 10815를 예로 들면 10815 ÷ 16 = 675에 나머지 15, 675 ÷ 16 = 42에 나머지 3, 42 ÷ 16 = 2에 나머지 10, 2 ÷ 16 = 0에 나머지 2가 됩니다. 나머지를 아래에서 위로 읽으면 2, 10, 3, 15이고, 여기서 10을 A로 15를 F로 바꾸면 2A3F가 됩니다. 알파벳을 빼먹고 2103이라고 적으면 나눗셈은 다 맞혔는데 답만 틀린 셈이 됩니다. 16진수를 쓰는 이유는 16진수 한 자리가 2진수 네 자리와 정확히 같기 때문입니다. 그래서 한 바이트는 언제나 두 글자이고 32비트 값은 언제나 여덟 글자입니다. 색상 코드나 메모리 주소, 해시 값이 모두 이 표기로 적히는 이유가 여기에 있습니다. 옆에 표시되는 자릿값의 합은 같은 값을 반대쪽에서 확인하는 길입니다. 16진수에서 자리는 4096, 256, 16, 1의 값을 가지므로 2A3F는 2×4096 + 10×256 + 3×16 + 15가 되고, 이 합이 10815로 돌아옵니다.
10815를 16으로 나눠 몫이 0이 될 때까지 한 단계씩 내려간 표
| 회차 | 나눗셈 | 몫 | 나머지 |
|---|---|---|---|
| 1 | 10815 ÷ 16 | 675 | 15 (F) |
| 2 | 675 ÷ 16 | 42 | 3 |
| 3 | 42 ÷ 16 | 2 | 10 (A) |
| 4 | 2 ÷ 16 | 0 | 2 |
이 표의 나머지 네 개 가운데 두 개가 숫자 뒤에 괄호로 글자를 붙인 형태로 적혀 있습니다. 15 (F)와 10 (A)이고, 이렇게 두 번 적는 것이 표가 존재하는 이유입니다. 나눗셈은 15를 주는데 답에는 F가 필요합니다. 나눗셈을 똑바로 해 놓고 나머지 열을 그대로 옮겨 적으면 2A3F가 아니라 2103이 되는데, 그것이 이 변환이 부르는 유일한 실수입니다. 열을 아래에서 위로 읽으면 답의 글자가 순서대로 나타납니다. 2, 10, 3, 15가 나오고 9를 넘는 두 값을 바꾸면 2A3F가 됩니다. 표는 위쪽 계산기가 입력한 수를 처리하는 것과 달리 10815에 고정되어 있는데, 결과가 아니라 방법을 보여 주기 때문입니다. 몫이 회차마다 16분의 1꼴로 줄어들므로 허용된 가장 큰 입력이라도 사다리는 열네 줄이면 끝납니다. 이는 16진수의 상한인 1FFFFFFFFFFFFF의 길이와 같은 수입니다.
공식
10815 ÷ 16 = 675 r 15 → 675 ÷ 16 = 42 r 3 → 42 ÷ 16 = 2 r 10 → 2 ÷ 16 = 0 r 2 ⇒ 10815 = 2A3F = 2×4096 + 10×256 + 3×16 + 15
- 10815
- 변환할 10진수 정수입니다. 소수점이 있는 값과 자릿수를 끊는 쉼표는 반올림해서 받아 주지 않고 그대로 거부하므로 10,815가 아니라 10815로 적어야 합니다. 쉼표는 언어에 따라 소수점을 뜻하기도 해서 어느 쪽으로 읽을지 추측하는 것보다 그대로 되돌려 보내는 편이 안전합니다
- ÷ 16
- 되풀이하는 나눗셈입니다. 2진수 쪽에서는 2였던 자리에 16이 들어갑니다. 16은 바꾸려는 진법의 밑이므로, 매 회차마다 16이 몇 번 들어가고 무엇이 남는지를 묻는 셈이 됩니다
- 몫
- 다음 회차로 넘어가는 값입니다. 몫이 0이 되면 과정이 끝나며, 그보다 높은 자리가 더 필요 없다는 뜻입니다. 몫이 1일 때 멈추면 마지막 자리를 빠뜨리게 됩니다
- 나머지
- 그 회차가 만들어 낸 자리이며, 여기서는 0이나 1이 아니라 0부터 15까지 아무 값이나 나옵니다. 이 차이를 지우는 것이 이 변환에서 가장 흔한 실수입니다. 나머지 15는 자리 15가 아닙니다. 16진법에는 15를 적을 한 글자가 없기 때문입니다
- A — F
- 10부터 15까지를 대신하는 글자입니다. A가 10, B가 11, C가 12, D가 13, E가 14, F가 15입니다. 따로 외워야 할 표기가 아니라, 한 자리 10진 문자로 적을 수 없었던 나머지에 이름을 붙인 것뿐입니다
- ⇒ 2A3F
- 나머지를 아래에서 위로 모아 만든 답이며, 9를 넘는 나머지는 이미 글자로 바뀐 상태입니다. 가장 먼저 나온 나머지가 가장 오른쪽 글자가 되므로, 나눗셈을 적은 순서대로 읽으면 답이 뒤집힙니다
- 2×4096 + 10×256 + 3×16 + 15
- 답을 자릿값으로 다시 읽은 것입니다. 2진수와 달리 계수가 모두 1이 아니라는 점이 중요합니다. 그래서 글자를 잘못된 숫자로 바꿔 놓으면 합이 달라지므로, 이 줄이 대입 실수를 잡아내는 검산이 됩니다
16진수는 개발자가 읽는 축약형이라 값이 두 표기 사이를 오갈 때마다 이 변환이 필요합니다. 색상 코드가 대표적인 예입니다. 채널 하나가 0부터 255까지이므로 16진수 두 글자가 되고, 그래서 색이 여섯 글자로 적히며 디자이너의 10815와 개발자의 2A3F가 같은 색이 됩니다. 메모리 주소나 체크섬, 해시, 데이터시트의 레지스터 값도 같은 이유로 16진수로 인쇄됩니다. 글자 하나가 네 비트라 값의 폭이 한눈에 읽히기 때문입니다. 스택 추적이나 패킷 덤프를 보는 사람은 이 변환을 반대 방향으로 시간당 수십 번 하고, 마스크나 매직 넘버를 적는 사람은 이 방향으로 합니다. 학습 과제에서도 직접 요구되는데, 대개 10진수를 16진수로 바꾸고 과정을 보이라는 형태입니다. 아래 참고표가 바로 그 과정이며, 나눗셈 한 줄마다 글자로 바꾼 결과가 함께 적혀 있습니다. 이 변환은 값의 폭을 드러내 주기도 합니다. 두 글자는 한 바이트이고 여덟 글자는 32비트 워드이므로, 어떤 형식에 값을 넣을 때 몇 글자를 차지하는지가 이 변환 하나로 정해집니다.
계산 예시
10815를 16진수로
- 10815 ÷ 16 = 675, 나머지 15 — 15는 F라고 적습니다
- 675 ÷ 16 = 42, 나머지 3
- 42 ÷ 16 = 2, 나머지 10 — 10은 A라고 적습니다
- 2 ÷ 16 = 0, 나머지 2 — 몫이 0이 되었으므로 여기서 멈춥니다
- 나머지를 아래에서 위로 읽으면 2, 10, 3, 15
- 10을 A로, 15를 F로 바꾸면 2A3F
페이지가 처음 열릴 때 들어 있는 입력이자 두 번의 대입을 모두 보여 주는 예입니다. 나머지 네 개 가운데 두 개에 글자가 필요했는데, 이는 운이 나빴던 것이 아니라 흔한 일입니다. 9를 넘는 나머지는 열여섯 번에 여섯 번꼴로 나오므로, 답이 서너 글자쯤 되면 대개 하나 이상 들어갑니다. 자릿값 줄에 10과 15가 그대로 남아 있는 것은 대입이 계산 뒤에 일어난다는 것을 보여 줍니다.
한 바이트 가득, 255
- 255 ÷ 16 = 15, 나머지 15 — F라고 적습니다
- 15 ÷ 16 = 0, 나머지 15 — F라고 적습니다
- 몫이 0이 되었으므로 나머지 두 개를 아래에서 위로 읽으면 FF
한 바이트가 담을 수 있는 가장 큰 값이 두 글자로 끝나는 경우이며, 16진수가 존재하는 이유가 여기에 있습니다. FF와 255의 짝은 외워 둘 만합니다. 색상 채널의 천장이고, 대부분의 언어에서 부호 없는 바이트의 최대값이며, 데이터 한 글자 분량의 값이기도 합니다. 자릿값 줄에 15가 두 번 나오지만 첫 번째 15는 16의 자리, 두 번째 15는 1의 자리라 서로 다른 자리입니다.
16의 거듭제곱, 1048576
- 1048576 ÷ 16 = 65536, 나머지 0
- 65536 ÷ 16 = 4096, 나머지 0
- 4096 ÷ 16 = 256, 나머지 0
- 256 ÷ 16 = 16, 나머지 0
- 16 ÷ 16 = 1, 나머지 0
- 1 ÷ 16 = 0, 나머지 1 — 아래에서 위로 읽으면 100000
2진수 페이지의 2의 거듭제곱 예와 짝을 이루는 경우입니다. 밑의 거듭제곱은 1 하나 뒤에 0이 늘어선 꼴로 나옵니다. 1048576은 16의 5제곱이면서 2의 20제곱이고, 이것이 이 표기의 요점입니다. 같은 값이 2진수로는 1 뒤에 0이 스무 개 붙은 꼴이고 16진수로는 100000인데, 읽을 만한 쪽은 두 번째입니다. 자릿값 줄에 항이 하나뿐인 것도 같은 이유입니다.
음수 -10815
- 빼기 부호는 변환하지 않고 그대로 들고 갑니다. 자리는 10815와 같은 방식으로 구합니다
- 10815 ÷ 16 = 675에 나머지 15에서 시작해 몫이 0에 나머지 2가 될 때까지 내려갑니다
- 아래에서 위로 읽은 자리는 2, A, 3, F
- 부호를 앞에 붙이면 -2A3F
앞에 붙은 빼기 부호는 받아들이고 결과 앞에도 그대로 붙이며, 자릿값 줄은 괄호로 묶여 표시됩니다. 괄호가 있는 이유는 빼기 부호가 첫 항에만 붙는 것이 아니라 합 전체에 걸리기 때문입니다. 여기서 쓰는 부호가 무엇이 아닌지도 짚어 둘 만합니다. 이것은 크기에 부호를 붙여 읽는 표기이며 컴퓨터가 저장하는 2의 보수 비트 패턴이 아닙니다. 음수 값의 레지스터 내용이 필요하다면 그것은 다른 질문이고 다른 페이지의 일입니다.
한계
정수만 변환하므로 소수점이 있는 값은 반올림하지 않고 거부합니다. 10815.5는 여기서 바꿀 수 없습니다. 자릿수를 끊는 쉼표도 거부하므로 10,815가 아니라 10815로 적어야 합니다. 쉼표가 어떤 언어에서는 소수점을 뜻하기도 해서 두 해석 중 하나를 추측하는 것보다 그대로 되돌려 보내는 편이 낫기 때문입니다. 입력할 수 있는 값은 9,007,199,254,740,991까지이며, 이는 16진수로 열네 글자인 1FFFFFFFFFFFFF입니다. 2진수 페이지에서 자리 53개로 나타나던 것과 같은 한계이며, 하나의 한계를 두 진법으로 적은 것뿐입니다. 앞에 붙은 0과 빼기 부호는 모두 받습니다. 빼기 부호는 크기에 부호를 붙여 읽는 표기를 만들 뿐이며 2의 보수 비트 패턴이 아닙니다. 참고표는 10815의 과정을 그대로 보여 주며 입력한 수를 따라가지 않습니다. 이것은 방법을 보여 주기 위한 것이지 결과를 보여 주기 위한 것이 아니기 때문입니다. 나눗셈은 몫이 0이 될 때까지 반복하고 나머지는 아래에서 위로 읽으며, 9를 넘는 나머지는 A부터 F까지의 글자로 바꿔 적습니다. 결과로 나오는 16진수는 언제나 대문자입니다. 이 페이지에는 단위가 없고, 16진수를 다시 10진수로 되돌리는 일은 하지 않습니다. 그 방향은 16진수-10진수 변환기의 몫입니다.
자주 묻는 질문
- 10진수를 16진수로 손으로 바꾸려면 어떻게 하나요?
- 16으로 나눠 나머지를 적고, 그 몫을 다시 16으로 나누기를 몫이 0이 될 때까지 되풀이합니다. 나머지를 아래에서 위로 읽고, 9를 넘는 나머지는 글자로 바꿔 적으면 됩니다. 10은 A, 11은 B, 12는 C, 13은 D, 14는 E, 15는 F입니다. 10815라면 나머지가 위에서 아래로 15, 3, 10, 2로 나오고, 거꾸로 읽어 대입하면 2A3F가 됩니다.
- 16진수에는 왜 글자가 쓰이나요?
- 16진법은 한 자리에 열여섯 개의 글자가 필요한데 10진 숫자는 열 개밖에 주지 않기 때문입니다. 모자라는 여섯 개를 어디선가 가져와야 하고, 모든 체계가 동의한 관례가 알파벳입니다. A가 10이고 F가 15이므로 이 체계의 글자는 0부터 9까지 간 뒤 A부터 F까지 이어집니다. 따로 외울 것이 아니라, 한 자리 10진 문자로 적을 수 없었던 나머지에 붙인 이름일 뿐입니다.
- 여기서 바꿀 수 있는 가장 큰 수는 얼마인가요?
- 9,007,199,254,740,991이고 16진수로는 열네 글자인 1FFFFFFFFFFFFF입니다. 이 한계는 2진수 페이지의 자리 53개 한계와 같은 곳에서 나옵니다. 같은 수를 두 진법으로 적은 것이기 때문입니다. 그보다 큰 값은 변환하지 않고 되돌려 보내는데, 그 폭을 넘으면 기계가 이웃한 정수를 구분해 담지 못해 변환 결과를 믿을 수 없기 때문입니다.
- 16진수는 2진수를 짧게 쓴 것과 같은 건가요?
- 같은 값을 2의 거듭제곱인 밑으로 적은 것입니다. 그래서 둘 사이를 오가기가 매우 쉽습니다. 16진수 한 글자는 정확히 2진수 네 자리이므로 2A3F는 0010 1010 0011 1111이 되고 남는 자리가 없습니다. 이는 이 예에서만 우연히 그러한 것이 아니라 모든 16진수에 대해 성립하며, 16진수를 쓰는 이유가 바로 이것입니다. 바꾸는 과정에서 잃는 것도 반올림해야 할 것도 없습니다.
- 소수점이 있는 10진수도 변환할 수 있나요?
- 여기서는 안 됩니다. 정수만 받으므로 10815.5는 반올림하지 않고 거부합니다. 16진수의 소수는 정의되어 있으며 소수점 오른쪽 자리는 16분의 1, 256분의 1의 값을 가집니다. 다만 그것을 받아들이려면 몇 글자까지 남기고 마지막 자리를 어떻게 반올림할지 정해야 하므로, 이 페이지를 비롯한 계산기들은 정수만 다룹니다.
- 16진수 값 말고 자릿값의 합도 함께 나오는 이유는 무엇인가요?
- 대입 실수를 잡아내는 검산이기 때문입니다. 나머지 15를 잘못된 글자로 바꾸거나 F가 있어야 할 자리에 A를 넣으면, 표시된 합이 처음 넣은 수로 돌아오지 않습니다. 2×4096 + 10×256 + 3×16 + 15는 글자를 바르게 읽었을 때만 10815가 됩니다. 2진수 쪽의 같은 합과 달리 계수가 모두 1이 아니어서, 답의 글자 하나하나가 각각 검산에 걸립니다.
참고 문헌
- Hexadecimal — 16진법과 10부터 15까지를 대신하는 A부터 F까지의 글자, 그리고 10진법과의 상호 변환 — Wolfram MathWorld (United States)
- Number base — 숫자의 값이 자리와 진법에 따라 달라지는 이유, 그리고 같은 값을 여러 진법으로 적는 방법 — Wolfram MathWorld (United States)
- Powers of two — 16진수의 자릿값이 되어 주는 1, 2, 4, 8, 16 … 수열. OEIS A000079로 등록되어 있습니다 — OEIS Foundation Inc. (United States)
- 教育部关于印发义务教育课程方案和课程标准(2022年版)的通知 — 이 통지의 첨부 목록 제5항이 《义务教育数学课程标准(2022年版)》에 해당하며, 십육진법과 진법 사이의 변환은 이 교육과정 기준의 수와 대수 영역 내용이므로 원문과 학년군 요구는 이 첨부를 기준으로 합니다 — 中华人民共和国教育部