컴퓨터 언어의 핵심: 16진수 (Hexadecimal)
16진수(Hexadecimal)는 0부터 9까지의 숫자와 A부터 F까지의 문자를 사용하여 값을 표현하는 수 체계(Base-16)입니다.
컴퓨터 하드웨어, 메모리 주소, 색상 코드(#FFFFFF) 등을 표현할 때 표준처럼 사용됩니다.
1. 왜 16진수를 쓰는가?
컴퓨터는 전기의 켜짐(1)과 꺼짐(0)인 2진수(Binary)만 이해합니다. 하지만 2진수는 자릿수가 너무 길어져 사람이 읽기 힘듭니다.
- 2진수:
1010 1100(너무 길고 가독성이 떨어짐) - 10진수:
172(2진수 패턴과 직관적으로 연결되지 않음) - 16진수:
AC(2진수 4자리가 딱 1글자로 매칭됨)
핵심 원리: 2진수 4비트(Bit)는 16진수 1자리와 완벽하게 1:1로 대응합니다. 이것이 하드웨어 제어에서 16진수를 쓰는 이유입니다.
2. 표기법 (Notation)
코딩(C, Python 등)에서는 이것이 10진수가 아닌 16진수임을 알리기 위해 앞에 접두어를 붙입니다.
0x: 가장 흔한 표기법 (예:0xFF,0x10)h: 어셈블리어 등에서 뒤에 붙이기도 함 (예:0FFh)
3. 변환 테이블 (Conversion Tables)
① 10진수 ↔ 16진수 (Decimal to Hex)
우리가 쓰는 숫자와 컴퓨터의 16진수 비교입니다. 0~9는 같지만, 10부터 알파벳이 나옵니다.
| 10진수 (Decimal) | 16진수 (Hex) | 설명 |
|---|---|---|
| 0 | 0 | |
| 1 | 1 | |
| 2 | 2 | |
| 3 | 3 | |
| 4 | 4 | |
| 5 | 5 | |
| 6 | 6 | |
| 7 | 7 | |
| 8 | 8 | |
| 9 | 9 | |
| 10 | A | 10부터 알파벳 시작 |
| 11 | B | |
| 12 | C | |
| 13 | D | |
| 14 | E | |
| 15 | F | 4비트의 최대값 |
② 16진수 ↔ 2진수 (Hex to Binary) - ⭐ 가장 중요
임베디드 하드웨어를 제어할 때 이 패턴을 외우고 있으면 매우 유리합니다.
| 16진수 (Hex) | 2진수 (Binary) | 10진수 값 |
|---|---|---|
| 0 | 0000 |
0 |
| 1 | 0001 |
1 |
| 2 | 0010 |
2 |
| 3 | 0011 |
3 |
| 4 | 0100 |
4 |
| 5 | 0101 |
5 |
| 6 | 0110 |
6 |
| 7 | 0111 |
7 |
| 8 | 1000 |
8 |
| 9 | 1001 |
9 |
| A | 1010 |
10 |
| B | 1011 |
11 |
| C | 1100 |
12 |
| D | 1101 |
13 |
| E | 1110 |
14 |
| F | 1111 |
15 |
예시:
0x2F를 2진수로 바꾸면?2->0010F->1111결합:0010 1111
1바이트 (2자리 16진수) ↔ 10진수 변환
2자리 16진수는 앞자리(16의 자리)와 뒷자리(1의 자리)로 구성됩니다.
공식: (앞자리 × 16) + 뒷자리
예:
0x2A= (2 × 16) + 10 = 42
1. 주요 값 변환표 (Key Milestones)
자주 쓰이는 값들의 기준점입니다.
| 16진수 (Hex) | 10진수 (Dec) | 설명 |
|---|---|---|
| 00 | 0 | 최소값 (Min) |
| 01 | 1 | |
| 0A | 10 | |
| 0F | 15 | 앞자리 바뀌기 직전 |
| 10 | 16 | $1 \times 16$ |
| 1F | 31 | |
| 20 | 32 | $2 \times 16$ (공백 문자 ASCII) |
| 32 | 50 | |
| 40 | 64 | $4 \times 16$ |
| 64 | 100 | 10진수 100 |
| 7F | 127 | 부호 있는 정수(Signed) 최대값 |
| 80 | 128 | 부호 있는 정수 최소값 (-128) |
| A0 | 160 | |
| C8 | 200 | 10진수 200 |
| FF | 255 | 최대값 (Max, 8비트 모두 1) |
2. 빠른 암산을 위한 앞자리 기준표
앞자리 숫자만 보고 대략적인 크기를 가늠하거나 계산할 때 유용합니다.
| 앞자리 (High Nibble) | 값 ($N \times 16$) |
|---|---|
| 0x | 0 |
| 1x | 16 |
| 2x | 32 |
| 3x | 48 |
| 4x | 64 |
| 5x | 80 |
| 6x | 96 |
| 7x | 112 |
| 8x | 128 |
| 9x | 144 |
| Ax | 160 |
| Bx | 176 |
| Cx | 192 |
| Dx | 208 |
| Ex | 224 |
| Fx | 240 |
활용법:
0xC2를 계산하고 싶다면? 1. 표에서Cx는 192임을 확인. 2. 뒷자리2를 더함. 3. 192 + 2 = 194