짧은 대답
16진수(기본 16)는 숫자 0-9와 문자 A-F를 사용하며 각 위치는 16의 거듭제곱을 나타냅니다. 16진수 FF는 15×16 + 15 = 10진수 255와 같으며 단일 바이트가 저장할 수 있는 가장 큰 값입니다. 프로그래머는 16진수를 이진수에 명확하게 매핑하기 때문에 16진수를 사용합니다. 16진수 숫자 1개는 항상 정확히 4비트와 동일하므로 16진수 2개는 전체 바이트를 나타냅니다.
주요 시사점
- 2개의 16진수는 1바이트(8비트)와 같습니다(00에서 FF(0에서 255까지)의 값). 이것이 바로 메모리 주소, 바이트 값 및 색상 코드가 거의 항상 16진수로 표시되는 이유입니다.
- 16진수를 2진수로 변환하는 것은 기계적입니다. 각 16진수를 해당하는 4비트 2진수로 바꾸고 함께 결합합니다.
- 16진수 산술은 10진수 산술과 동일한 운반 및 차용 논리를 따르지만 10 대신 16을 밑으로 합니다.
- 웹 색상(#RRGGBB)은 3바이트 값(빨간색, 녹색, 파란색)을 색상 채널당 2개씩 6개의 16진수로 묶습니다.
16진수 값(0~F)
| 마녀 | 소수 | 마녀 | 소수 |
|---|---|---|---|
| A | 10 | D | 13 |
| B | 11 | E | 14 |
| C | 12 | F | 15 |
10진수를 16진수로 변환
202 ¼ 16 = 12 나머지 10 → A
12 ¼ 16 = 0 나머지 12 → C
나머지 부분을 아래에서 위로 읽기: CA
따라서 10진수 202는 16진수 CA와 같습니다. 역방향으로 확인: C×16 + A = 12×16 + 10 = 192 + 10 = 202 — 변환 확인.
실제 예: 16진수 추가
3A+1F
A(10) + F(15) = 25 = 1×16 + 9 → 9를 쓰고 1을 나른다.
3 + 1 + 캐리 1 = 5
결과: 59
10진수로 확인: 3A = 58, 1F = 31, 58 + 31 = 89, 즉 5×16 + 9 = 0x59 — 16진수 연산과 정확히 일치합니다. 소수 덧셈과의 유일한 실제 차이점은 열이 10이 아닌 16에 도달하면 캐리가 발생한다는 것입니다.
피해야 할 일반적인 실수
- 습관적으로 16 대신 10을 사용합니다. 16진수 열은 값이 10진수처럼 10이 아닌 16에 도달하면 전달됩니다.
- 단일 16진수를 1비트라고 가정하면 16 = 2⁴이므로 항상 4비트를 나타냅니다.
- 고정 너비 바이트 또는 색상 채널에서 앞에 0을 삭제합니다. 0x0A와 0xA는 동일한 값이지만 두 자리 바이트 디스플레이에서는 A가 아닌 0A를 예상합니다.
- 대소문자를 일관되지 않게 혼합합니다. 16진수는 대소문자를 구분하지 않지만(a = A = 10) 한 대소문자를 고수하면 더 긴 값에서 시각적 혼란을 피할 수 있습니다.