진법이란?
우리가 쓰는 10진법은 0~9 열 개의 숫자로 수를 표현합니다. N진법은 \(N\)개의
숫자만으로 수를 나타내는 방식입니다. 2진법(0,1), 8진법, 16진법(09,AF)이 자주
쓰입니다.
1. 자릿값의 의미
10진수 \(342\)는 \(3 \times 10^2 + 4 \times 10^1 + 2 \times 10^0\)입니다. 진법이 바뀌면
밑(base) 만 바뀝니다. 2진수 \(1011\)은:
$$ 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 = 11 $$
즉 "각 자리 숫자 × 밑의 거듭제곱"의 합이 10진수 값입니다.
2. N진수 → 10진수 (읽기)
왼쪽부터 자리마다 밑을 곱해 누적하면 됩니다.
1011 (2진) 을 10진으로:
0
0*2 + 1 = 1
1*2 + 0 = 2
2*2 + 1 = 5
5*2 + 1 = 11
"지금까지 값 × 밑 + 새 자리"를 반복하는 호너(Horner) 방식이 깔끔합니다.
3. 10진수 → N진수 (쓰기)
밑으로 계속 나누면서 나머지를 거꾸로 읽습니다.
11을 2진수로:
11 / 2 = 5 ... 1
5 / 2 = 2 ... 1
2 / 2 = 1 ... 0
1 / 2 = 0 ... 1
나머지를 아래에서 위로: 1011
나머지가 거꾸로 나온다는 게 핵심 포인트입니다.
4. 10을 넘는 자리 (16진법 등)
16진법은 한 자리에 0~15가 들어가므로, 10~15를 A~F로 표기합니다.
| 값 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|
| 문자 | A | B | C | D | E | F |
숫자 ↔ 문자 변환은 아스키 코드를 씁니다('A' + (값-10)).
복잡도
변환은 자릿수에 비례합니다. \(N\)진법으로 표현한 자릿수는 약 \(\log_N(\text{값})\)이라
사실상 \(O(\log)\)로 매우 빠릅니다.
정리
- N진수 값 = \(\sum (\text{자리 숫자}) \times N^{\text{위치}}\).
- N진 → 10진: "값 × 밑 + 새 자리" 반복.
- 10진 → N진: 밑으로 나눈 나머지를 거꾸로.
- 10 이상 자리는 A~F 등 문자로(아스키 활용).