16진수-2진수 변환기
계산 결과
2진수
- 4자리씩 묶음
- 0010 1010 0011 1111
16진수를 2진수로 바꾸는 변환기입니다. 이 사이트의 변환 가운데 계산이 전혀 필요 없는 유일한 변환이기도 합니다. 16진수 한 글자는 정확히 2진수 네 자리입니다. 이는 어느 특정한 수의 우연이 아니라 16진법이 존재하는 이유이며, 그래서 글자마다 자기 몫의 네 비트로 바뀌고 자리 사이에 올림이 생기지 않습니다. 2는 0010, A는 1010, 3은 0011, F는 1111이 되므로 2A3F는 10101000111111이 됩니다. 바꿔 넣을 값은 열여섯 개뿐이고 늘어나지 않습니다. 0은 0000, 1은 0001이고, 이 수열이 2진수로 하나씩 세어 올라가 F에서 1111로 끝납니다. 10진수에서는 글자의 무게가 어디에 앉아 있느냐에 따라 달라지지만, 여기서는 어느 자리에 있든 한 글자가 네 비트입니다. 한 가지 헷갈리기 쉬운 점이 있습니다. 답의 자리가 두 번 인쇄되는데, 한 번은 이어 붙인 형태로, 한 번은 네 자리씩 끊은 형태로 나옵니다. 끊은 줄이 더 긴 이유는 맨 앞 묶음을 0으로 채웠기 때문입니다. 2A3F는 열네 비트이므로 네 자리씩 끊으면 0010 1010 0011 1111이 되고, 열여섯 글자가 되도록 앞에 0 세 개가 붙습니다. 그 0은 값을 바꾸지 않습니다. 두 번째 묶음과 세 번째 묶음 사이의 경계를 세어 보지 않고도 볼 수 있게 하려고 붙인 것입니다. 소문자 입력도 받아 정규화합니다. 2a3f와 2A3F는 같은 수이고 같은 답을 냅니다. 실제로 마주치는 16진수 문자열, 곧 색상 값이나 해시, 식별자는 대개 소문자로 적히므로 이 처리가 필요합니다. 이 페이지는 16진수 정수만 받으며, 0부터 9까지와 A부터 F까지 이외의 글자는 변환하지 않고 입력 칸을 빨갛게 표시합니다.
2A3F의 글자 하나하나를 네 비트로 펼친 표
| 16진수 글자 | 니블 | 10진수 |
|---|---|---|
| 2 | 0010 | 2 |
| A | 1010 | 10 |
| 3 | 0011 | 3 |
| F | 1111 | 15 |
글자마다 한 줄씩 네 줄이고 이것이 방법의 전부입니다. 다섯 번째 줄은 없고 설명할 올림도 없습니다. 셋째 열은 글자를 수로 읽은 값이며 둘째 열의 네 비트가 더해져 나오는 값입니다. A가 열인 것은 1010이 8 + 2이기 때문이고, F가 열다섯인 것은 1111이 8 + 4 + 2 + 1이기 때문입니다. 둘째 열을 위에서 아래로 읽어 이어 붙이면 2진수 답이 되고, 대신 10진수를 물었다면 셋째 열을 읽으면 됩니다. 채우기 규칙을 보려면 첫 줄을 보면 됩니다. 2는 0010이고 수 자체에는 필요 없는 앞의 0이 붙어 있는데, 그 0은 이 줄을 다른 세 줄처럼 네 글자 폭으로 만들기 위해 있습니다. 표는 2A3F에 고정되어 있고 위쪽 계산기는 입력한 수를 처리합니다.
공식
2A3F ⇒ 2 → 0010, A → 1010, 3 → 0011, F → 1111 ⇒ 10101000111111, 네 자리씩 묶으면 0010 1010 0011 1111
- 2A3F
- 변환할 16진수입니다. 글자는 대소문자를 가리지 않으므로 2a3f와 2A3F는 같은 값이고, 답은 언제나 대문자로 인쇄됩니다. 이는 이 사이트가 2진법과 16진법 표기에 쓰는 관례입니다
- 한 글자
- 이 변환이 일하는 단위입니다. 글자마다 따로 처리하고 다음 글자로 넘기는 값이 없으므로, 왼쪽에서 오른쪽으로 하든 아무 순서로 하든 중간 합을 들고 다닐 필요가 없습니다
- 4비트
- 글자 하나가 펼쳐지는 2진수 자릿수이며 예외가 없습니다. 글자가 열여섯 가지이고 네 비트로 만들 수 있는 모양도 열여섯 가지라 두 진법이 짝을 이루며, 그래서 2진수 답의 길이는 언제나 글자 수의 네 배가 됩니다. 네 자리 묶음을 니블이라고 부르기도 합니다
- 0000 — 1111
- 글자 하나가 만들 수 있는 값 전부이며 0부터 15까지를 2진수로 세어 올라간 것입니다. 이것이 바꿔 넣을 표를 그대로 적은 것이며, 0은 0000, 1은 0001이고 9가 1001, 그다음 A부터 F가 1010부터 1111까지 이어집니다
- ⇒ 10101000111111
- 자리를 사이에 아무것도 없이 이어 붙인 것입니다. 이것이 이 수의 2진수 형태이며 채우기를 하지 않았으므로, 위쪽 비트가 0인 값은 글자 수의 네 배보다 짧게 나옵니다
- 0010 1010 0011 1111
- 같은 자리를 넷씩 끊은 것이며 이쪽에는 채우기가 들어 있습니다. 첫 묶음이 10이 아니라 0010인 것은 모든 묶음을 네 글자 폭으로 맞춰 16진수 글자와 경계를 나란히 두기 위해 앞에 0 세 개를 붙였기 때문입니다
- 2⁵³ − 1
- 입력의 상한이며 여기서는 낯선 모양으로 도착합니다. 16진수 열네 글자인 1FFFFFFFFFFFFF이고, 2진수 쉰세 자리이며, 10진수로 9,007,199,254,740,991입니다. 더 긴 입력은 변환하지 않고 거부합니다
사람은 16진수로 적고 기계는 2진수로 실행하므로, 하드웨어에 가까운 일을 하는 사람에게 두 표기 사이를 옮기는 것은 매일의 과정입니다. 2A3F 같은 색상 코드는 16진수 네 글자이고, 그 가운데 어떤 비트가 켜져 있는지를 읽는 일, 곧 비트 마스크나 권한 플래그, 레지스터 설정이 실제로 묻는 것은 그 값을 2진수로 보는 것입니다. 16진수로 인쇄된 해시와 체크섬, 비트 플래그도 같은 방식으로 읽으며, 디버거의 주소나 패킷 캡처의 플래그도 마찬가지입니다. 반대 방향의 변환도 쓸모가 있어서 이 페이지가 따로 있습니다. 2진수는 몇 자리만 넘어가도 읽을 수 없으므로, 2진수로 찾은 값은 대개 16진수로 적어서 넘깁니다. 학습 과제에서는 16진수를 2진수로 바꾸라는 형태로 나오는데, 대입 외에 보여 줄 풀이가 없습니다. 그래도 채우기는 적어 둘 만합니다. 10101000111111과 0010 1010 0011 1111은 같은 수이면서 보이는 구조의 양이 다르고, 어느 쪽이 필요한지는 읽는 사람이 값이 필요한지 바이트 배치가 필요한지에 따라 갈리기 때문입니다.
계산 예시
2A3F 변환하기
- 글자를 하나씩 봅니다: 2, A, 3, F
- 각각을 네 비트로 바꿉니다. 2는 0010, A는 1010, 3은 0011, F는 1111
- 네 묶음을 사이에 아무것도 없이 이어 붙이면 10101000111111
- 같은 자리를 넷씩 끊고 첫 묶음을 채우면 0010 1010 0011 1111
페이지가 처음 열릴 때 들어 있는 입력이자 채우기를 보여 주는 예입니다. 두 출력 줄의 길이가 다른데, 하나는 열네 자리이고 다른 하나는 공백 세 개를 포함해 열여섯 자리입니다. 이는 예상된 차이입니다. 첫 줄은 수 자체이고 둘째 줄은 글자 경계를 보이게 만든 같은 수입니다. A와 F가 변환된 것이 아니라 대입되었다는 점도 짚어 둘 만합니다. 이 과정 어디에도 계산이 없습니다.
한 바이트, B2
- B는 11이고 네 비트로는 1011입니다
- 2는 네 비트로 0010입니다
- 이어 붙이면 10110010 — 여덟 자리, 두 묶음, 한 바이트
16진수 두 글자는 언제나 여덟 비트, 곧 한 바이트입니다. 이 짝을 알아 둘 값어치가 있는 이유는 값의 폭이 아무것도 세지 않고 바로 읽히기 때문입니다. 여기서 묶음 경계가 바이트와 잘 맞아떨어지는 것은 이 값의 성질이 아니라 두 글자라는 사실의 성질입니다.
소문자 입력, 2a3f
- 소문자 a는 대문자 A와 같은 값입니다. 둘 다 열입니다
- 소문자 f는 대문자 F와 같은 값입니다. 둘 다 열다섯입니다
- 변환은 2A3F일 때와 똑같이 진행되고 같은 답을 냅니다
두 출력이 첫 번째 예와 한 글자도 다르지 않게 나옵니다. 웹 페이지나 스타일시트, 로그에서 복사한 16진수 문자열은 대개 소문자이므로, 어느 쪽이든 받는 것은 편의가 아니라 필수입니다. 소문자를 거부하면 사람들이 실제로 가져오는 입력에서 이 페이지를 쓸 수 없게 됩니다.
가장 큰 입력, 1FFFFFFFFFFFFF
- 글자가 열네 개이므로 첫 묶음을 채우면 답은 쉰여섯 비트가 됩니다
- 맨 앞의 1은 네 비트 묶음에서 0001이 되며, 채우기가 드러나는 곳이 바로 여기입니다
- F 열세 글자는 각각 1111이므로 채운 답은 0 세 개 뒤에 1이 쉰세 개 붙은 꼴이 됩니다
- 채우기를 하지 않은 수 자체는 1이 쉰세 개입니다
상한이며 채우기 규칙이 가장 선명하게 드러나는 경우입니다. 첫 묶음이 1이 아니라 0001이라 끊은 줄에는 이어 붙인 줄에 없는 0 세 개가 앞에 붙습니다. 같은 한계가 10진수 페이지에서는 9,007,199,254,740,991로, 읽기 페이지에서는 쉰세 자리로 나타납니다. 하나의 경계를 세 가지 진법으로 적은 것입니다.
한계
정수만 변환하며 입력이 10진수가 아니라 16진수 문자열이라 거부할 소수점이 없습니다. 대신 0부터 9까지와 A부터 F까지 이외의 글자를 거부합니다. 입력은 16진수 열네 글자까지이고 그 값이 1FFFFFFFFFFFFF이며, 더 긴 문자열은 잘라서 받는 대신 메시지와 함께 거부합니다. 잘린 답은 답처럼 보이기 때문입니다. 앞에 붙은 0은 받으며 값을 바꾸지 않습니다. 앞에 붙은 빼기 부호도 받는데, 그때 채우기는 부호를 붙이기 전의 자리에 적용되므로 끊은 줄은 부호가 중간에 끼어든 꼴이 아니라 부호 뒤에 0010이 오는 꼴로 표시됩니다. 답은 입력한 모양과 상관없이 언제나 대문자로 인쇄됩니다. 참고표는 기본값 2A3F를 펼쳐 보이며 입력한 수를 따라가지 않습니다. 두 출력 줄은 같은 값이고 길이만 다릅니다. 이어 붙인 줄은 값을 보여 주고 끊은 줄은 글자 경계를 보여 주므로, 둘을 같은 문자열로 여기면 어느 한쪽이 틀렸다고 오해하게 됩니다. 이 페이지는 한 글자를 네 비트로 바꾸는 일만 하고, 반대 방향인 2진수에서 16진수로의 변환은 별도의 페이지입니다.
자주 묻는 질문
- 16진수 한 글자가 왜 항상 네 비트인가요?
- 4와 16이 모두 2의 거듭제곱이고 16은 2를 네 번 곱한 수이기 때문입니다. 네 비트로 만들 수 있는 모양은 2의 네제곱, 곧 열여섯 가지이며 이는 16진법이 가진 글자 수와 정확히 같습니다. 그래서 두 집합이 남김없이 맞아떨어집니다. 글자마다 네 비트 모양이 하나씩 있고 네 비트 모양마다 글자가 하나씩 있습니다. 16진법을 쓰는 이유가 여기에 있으며, 비트로 깔끔하게 나뉘지 않는 10진법을 쓰지 않는 이유도 같습니다.
- 끊은 답이 이어 붙인 답보다 긴 이유는 무엇인가요?
- 끊은 줄에는 채우기가 들어 있고 이어 붙인 줄에는 없기 때문입니다. 이어 붙인 줄은 수 자체의 2진수 형태라 앞의 0을 버리고, 끊은 줄은 네 비트 묶음이 정수 개여야 하므로 맨 위 묶음을 0으로 채웁니다. 2A3F라면 앞에 0이 세 개 더 붙어 한 줄은 열네 자리, 다른 줄은 열여섯 자리가 됩니다. 어느 쪽도 틀리지 않았고 같은 값입니다. 값이 필요하면 첫 줄을, 글자가 어디서 끊기는지 보려면 둘째 줄을 보면 됩니다.
- 16진수를 2진수로 손으로 바꾸려면 어떻게 하나요?
- 글자마다 네 비트로 바꿔 왼쪽에서 오른쪽으로 이어 붙이면 됩니다. 열 개의 숫자에 대한 네 비트는 2진수로 세어 올라간 것으로, 0은 0000, 1은 0001, 2는 0010이고 9가 1001입니다. 그다음 A가 1010, B가 1011, C가 1100, D가 1101, E가 1110, F가 1111입니다. 올릴 것도 없고 들고 다닐 합도 없으므로 글자를 아무 순서로 처리해도 됩니다.
- 글자를 대문자로 써야 하나요, 소문자로 써야 하나요?
- 어느 쪽이든 상관없습니다. 2a3f와 2A3F는 같은 수이고 둘 다 10101000111111로 변환됩니다. 답은 언제나 대문자로 인쇄되며, 이는 기술 문서에서 두 진법 모두에 쓰는 관례입니다. 소문자 입력을 받아 주는 것이 중요한 이유는 사람들이 복사해 오는 16진수 문자열, 곧 스타일시트의 색상 값이나 해시, 로그의 식별자가 대개 소문자로 적혀 있기 때문입니다.
- 여기서 변환할 수 있는 가장 큰 16진수는 얼마인가요?
- 열네 글자까지이고 상한은 1FFFFFFFFFFFFF이며 1이 쉰세 개인 값으로 변환됩니다. 더 긴 문자열은 줄여서 받는 대신 메시지와 함께 거부합니다. 이 한계는 이 페이지에만 있는 것이 아니라 10진수 페이지에서 9,007,199,254,740,991로, 읽기 페이지에서 쉰세 자리로 나타나는 것과 같은 경계입니다. 그보다 넓으면 기계가 이웃한 정수를 구분해 담지 못하므로 그 너머의 답은 믿을 수 없습니다.
- 16진수를 2진수로 바꾸는 것과 10진수로 바꾸는 것은 같은 건가요?
- 다릅니다. 둘 다 같은 문자열에서 출발하므로 헷갈리기 쉽습니다. 2진수로 바꾸는 것은 대입이며 글자마다 네 비트가 되고 계산이 일어나지 않습니다. 10진수로 바꾸는 것은 합이며 글자마다 그 자리가 나타내는 16의 거듭제곱을 곱한 뒤 더합니다. 2A3F라면 2×4096 + 10×256 + 3×16 + 15가 됩니다. 2진수 쪽이 빠른 이유는 밑이 2의 거듭제곱이고 10진수 쪽은 아니기 때문입니다.
참고 문헌
- Hexadecimal — 16진법과 A부터 F까지의 글자, 그리고 16진수 한 글자가 2진수 네 자리인 이유 — Wolfram MathWorld (United States)
- Binary number — 자리 표기와 자릿값, 그리고 네 비트 묶음이 세어 올라가는 2의 거듭제곱 — Wolfram MathWorld (United States)
- Nibble — 네 비트로 이루어진 묶음이며, 이 변환이 글자 하나를 펼치는 단위 — Wolfram MathWorld (United States)
- 教育部关于印发义务教育课程方案和课程标准(2022年版)的通知 — 이 통지의 첨부 목록 제5항이 《义务教育数学课程标准(2022年版)》에 해당하며, 이진법과 십육진법 사이의 변환은 정보 교과 내용이므로 원문과 학년군 요구는 이 첨부를 기준으로 합니다 — 中华人民共和国教育部