🔢 진수 변환 — 2진 · 8진 · 10진 · 16진
진수(Radix / Base) 는 한 자리에 쓸 수 있는 숫자의 개수. 컴퓨터는 2진수로 동작하지만
2진수는 자릿수가 길어 읽기 힘들기 때문에, 3비트씩 묶은 8진수와 4비트씩 묶은 16진수로 줄여 표기한다.
모든 변환의 핵심은 "2진수를 거쳐 가는 것" 하나뿐이다.
📋 4가지 진법 한눈에
| 진법 | 사용 숫자 | 한 자리 = 몇 비트 | 표기 | 예 (10진수 250) |
|---|---|---|---|---|
| 2진수 Binary | 0, 1 | 1 비트 | 1010₂ · 0b1010 · 1010(2) | 11111010 |
| 8진수 Octal | 0 ~ 7 | 3 비트 | 372₈ · 0o372 | 372 |
| 10진수 Decimal | 0 ~ 9 | — | 250 | 250 |
| 16진수 Hexadecimal | 0~9, A~F | 4 비트 | FA₁₆ · 0xFA | FA |
🧮 진수 변환기 — 값을 넣으면 4가지 진법과 풀이 과정을 함께 보여줍니다
2진수 (Binary)
—
8진수 (Octal)
—
10진수 (Decimal)
—
16진수 (Hex)
—
예제 넣기 →
⚡ 가장 빠른 방법 — 자릿값 8칸 하나로 끝내기
진수 변환에서 외울 건 딱 한 줄이다.
128 64 32 16 8 4 2 1
이걸 먼저 적어두면 나눗셈이 아예 필요 없어진다. 아래 세 동작이 전부다 — ① 8칸 적기 → ② 큰 것부터 빼기 → ③ 4칸씩 끊기
128 64 32 16 8 4 2 1
이걸 먼저 적어두면 나눗셈이 아예 필요 없어진다. 아래 세 동작이 전부다 — ① 8칸 적기 → ② 큰 것부터 빼기 → ③ 4칸씩 끊기
🎛️ 직접 눌러 보세요
칸을 클릭해 1/0을 켜고 끄면, 10진수와 16진수가 바로 바뀝니다.
예제 →
① 10진수 → 2진수 큰 것부터 빼기
왼쪽부터 "뺄 수 있나?" 만 물어본다. 뺐으면 1, 못 뺐으면 0. 예) 200
| 자릿값 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| 뺄 수 있나? | O | O | X | X | O | X | X | X |
| 결과 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
200 − 128 = 72 → 72 − 64 = 8 → 8 − 8 = 0 (끝)
→ 11001000(2)
💡 나눗셈으로 하면 8번 나눠야 하는데, 이 방법은 뺄셈 3번이면 끝난다.
0이 되는 순간 나머지 자리는 전부 0이라 더 볼 필요도 없다.
② 2진수 → 10진수 1인 자리만 더하기
128 64 32 16 8 4 2 1
1 1 0 0 1 0 0 0
128 + 64 + 8 = 200
💡 0인 자리는 쳐다볼 필요도 없다. 1인 곳만 눈으로 훑어서 더하면 끝.
③ 16진수 8칸을 4+4로 자르기
1100 1000
│ │
8+4=12 8
C 8 → C8(16)
여기가 핵심 — 0~F 16줄을 외우려 하지 마세요.
4비트는 자릿값이 8 4 2 1 네 칸뿐이라, 그냥 더하면 나옵니다.
결과는 같은데 외울 게 없습니다.
④ 16진 ↔ 10진 (두 자리) 16배 + 나머지
16진 → 10진
C8
= 12 × 16 + 8
= 192 + 8 = 200
10진 → 16진
200 ÷ 16
= 12 … 나머지 8
12 = C → C8
💡 두 자리 16진수(= 1바이트)는 2진수를 거치지 않고 이 방법이 제일 빠르다.
🧠 알아두면 계속 써먹는 것
| 요령 | 내용 | 예 |
|---|---|---|
| 1이 n개 = 2ⁿ − 1 | 1이 쭉 이어지면 굳이 더하지 말고 바로 계산 | 1111 = 2⁴−1 = 15 11111111 = 2⁸−1 = 255 |
| 2배 = 오른쪽에 0 붙이기 | 절반은 반대로 0 하나 떼기 (시프트 연산) | 1100(12) → 11000(24) |
| 끝자리로 홀짝 판단 | 맨 오른쪽이 1이면 홀수, 0이면 짝수 → 검산용 | 11001000 → 끝이 0 → 짝수 ✔ |
| 자릿수로 크기 확인 | 8비트면 0~255, 16진 2자리면 0~255 (= 1바이트) | FF = 255가 최대 |
| 서브넷 마스크 옥텟 | 1이 왼쪽부터 채워진 것뿐이라 순서대로 외워진다 | 128 192 224 240 248 252 254 255 |
📎 마지막 서브넷 마스크 옥텟은 서브넷팅 / CIDR 계산에 그대로 쓰인다 →
서브넷팅 단원 보기
✋ 정리 — 이 세 동작이 전부
① 자릿값 8칸 적기 → ② 큰 것부터 빼기 → ③ 4칸씩 끊기
아래에 나오는 "2로 나누기"는 교과서 방식이라 원리 이해용으로 보고, 실제 문제를 풀 때는 위 방법이 훨씬 빠르다.
① 자릿값 8칸 적기 → ② 큰 것부터 빼기 → ③ 4칸씩 끊기
아래에 나오는 "2로 나누기"는 교과서 방식이라 원리 이해용으로 보고, 실제 문제를 풀 때는 위 방법이 훨씬 빠르다.
⭐ 이것만 외우면 끝 — 4비트 대응표
2진수 4자리(0000~1111) = 16진수 한 자리(0~F) = 10진수 0~15.
이 16줄만 외우면 2진 ↔ 16진 변환은 암산으로 끝난다. 8진수는 3비트씩 묶어 0~7만 보면 된다.
0000
10진 0
16진 0
0001
10진 1
16진 1
0010
10진 2
16진 2
0011
10진 3
16진 3
0100
10진 4
16진 4
0101
10진 5
16진 5
0110
10진 6
16진 6
0111
10진 7
16진 7
1000
10진 8
16진 8
1001
10진 9
16진 9
1010
10진 10
16진 A
1011
10진 11
16진 B
1100
10진 12
16진 C
1101
10진 13
16진 D
1110
10진 14
16진 E
1111
10진 15
16진 F
8진수는 3비트 8줄이면 끝
000=0
001=1
010=2
011=3
100=4
101=5
110=6
111=7
📐 2의 거듭제곱 — 자릿값 표
2진수를 10진수로 바꿀 때 쓰는 자릿값. 오른쪽 끝이 2⁰ = 1 이고 왼쪽으로 갈수록 2배가 된다.
2¹⁰ = 1,024 ≈ 1K 만 기억하면 그 위는 곱셈으로 금방 나온다.
| 지수 | 2⁰ | 2¹ | 2² | 2³ | 2⁴ | 2⁵ | 2⁶ | 2⁷ | 2⁸ | 2⁹ | 2¹⁰ |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 값 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 |
거꾸로도 자주 나온다 — log₂ log₂2=1 · log₂4=2 · log₂8=3 · log₂16=4 · log₂32=5 · log₂64=6 · log₂256=8 · log₂1024=10
나이퀴스트 공식(C = 2B·log₂M), QAM 진수별 비트 수, 해밍 코드 계산에서 그대로 쓰인다.
나이퀴스트 공식(C = 2B·log₂M), QAM 진수별 비트 수, 해밍 코드 계산에서 그대로 쓰인다.
🚀 변환 요령 — 이 5가지가 전부
① 2진수 → 10진수 자릿값을 더한다
1 1 0 1 1(2)
↓ 각 자리에 자릿값을 붙인다
16 8 4 2 1
1 1 0 1 1
↓ 1인 자리만 더한다
16 + 8 + 0 + 2 + 1 = 27
💡 1이 있는 자리만 더하면 끝. 0인 자리는 계산할 필요가 없다.
② 10진수 → 2진수 2로 나누고 나머지를 거꾸로 · 교과서 방식
27 ÷ 2 = 13 … 1 ↑
13 ÷ 2 = 6 … 1 │ 아래에서
6 ÷ 2 = 3 … 0 │ 위로
3 ÷ 2 = 1 … 1 │ 읽는다
1 ÷ 2 = 0 … 1 ↑
→ 11011(2)
💡 더 빠른 방법 — 큰 자릿값부터 빼기. 27에서 16을 빼면 11, 11에서 8을 빼면 3, 3에서 2를 빼면 1, 1에서 1을 빼면 0.
뺀 자리는 1, 못 뺀 자리는 0 → 16(1) 8(1) 4(0) 2(1) 1(1) = 11011. 나눗셈보다 훨씬 빠르다.
③ 2진수 ↔ 8진수 소수점 기준으로 3비트씩 묶는다
1 0 1 1 0 1 0(2)
↓ 오른쪽부터 3개씩 끊고, 모자라면 왼쪽에 0을 채운다
001 011 010
1 3 2
→ 132(8)
💡 8 = 2³ 이라서 딱 3비트. 반대로 8진수 → 2진수는 각 자리를 3비트로 펼치면 된다. (7 → 111)
④ 2진수 ↔ 16진수 4비트씩 묶는다 — 가장 많이 쓰임
1 1 0 1 0 1 1 0(2)
↓ 오른쪽부터 4개씩 끊는다
1101 0110
13 6
→ D 6 → D6(16)
💡 16 = 2⁴ 이라서 딱 4비트. 위의 4비트 대응표만 외우면 바로 읽힌다.
1바이트(8비트) = 16진수 정확히 2자리 → MAC 주소·IP·색상코드가 16진수인 이유.
1바이트(8비트) = 16진수 정확히 2자리 → MAC 주소·IP·색상코드가 16진수인 이유.
⑤ 8진수 ↔ 16진수 직접 하지 말고 2진수를 경유
372(8)
↓ 각 자리를 3비트로 펼친다
011 111 010
↓ 이어 붙이고 4비트로 다시 끊는다
0 1111 1010 → 1111 1010
F A
→ FA(16)
⚠ 8진 ↔ 16진을 10진수로 돌아가면 계산이 훨씬 길어진다. 반드시 2진수를 경유할 것.
🔸 소수점이 있을 때
소수부 10진 → 2진 : 2를 곱한다
0.75 × 2 = 1.5 ↓
0.5 × 2 = 1.0 ↓ (0이 되면 끝)
→ 0.11(2)
정수부는 나눗셈 나머지를 거꾸로, 소수부는 곱셈 정수부를 순서대로 읽는다.
소수부 2진 → 10진 : 자릿값이 12씩
0.1 0 1(2)
자릿값 = 0.5 0.25 0.125
→ 0.5 + 0 + 0.125 = 0.625
소수점 오른쪽은 2⁻¹, 2⁻², 2⁻³ … 순서.
소수점 묶기 주의 — 2진 ↔ 8진/16진에서 정수부는 소수점 기준 왼쪽으로, 소수부는 오른쪽으로 묶는다.
모자라는 자리는 바깥쪽에 0을 채운다. 예) 1.011₂ → 정수 0001, 소수 0110 → 1.6₁₆
➖ 보수(Complement) — 음수 표현
| 구분 | 만드는 법 | 예 (8비트, 5 = 00000101) |
|---|---|---|
| 1의 보수 | 모든 비트를 반전 (0↔1) | 11111010 |
| 2의 보수 | 1의 보수 + 1 = 음수 표현에 실제 사용 | 11111011 (= −5) |
| r의 보수 | rⁿ − N (10진수면 10의 보수) | 10의 보수(365) = 1000 − 365 = 635 |
| (r−1)의 보수 | (rⁿ − 1) − N (10진수면 9의 보수) | 9의 보수(365) = 999 − 365 = 634 |
💡 2의 보수를 빨리 만드는 법 — 오른쪽 끝에서부터 보면서 처음 나오는 1까지는 그대로 두고,
그 왼쪽은 전부 반전시킨다. 00000100 → 11111100. 반전 후 +1 하는 것보다 훨씬 빠르다.
🧩 함께 나오는 코드 체계
| 코드 | 내용 | 예 (10진수 25) |
|---|---|---|
| BCD 8421 코드 | 10진수 한 자리를 4비트 2진수로 각각 표현. 0~9만 사용하고 1010~1111은 쓰지 않음 | 0010 0101 |
| 3초과 코드 Excess-3 | BCD에 +3(0011)을 더한 코드. 자기보수 코드 | 0101 1000 |
| 그레이 코드 | 인접한 두 수가 1비트만 달라짐. 아날로그→디지털 변환 오차 방지 | 2진 → 그레이 : 최상위는 그대로, 나머지는 인접 비트 XOR |
| ASCII | 7비트 문자 코드 (128자). 'A'=65=0x41, 'a'=97=0x61, '0'=48=0x30 | 'A' = 0x41 = 1000001 |
📝 시험 포인트
• 2진 ↔ 8진 = 3비트씩, 2진 ↔ 16진 = 4비트씩 묶기 (8=2³, 16=2⁴)
• 8진 ↔ 16진은 반드시 2진수를 경유
• 10진 → 2진은 큰 자릿값부터 빼기가 나눗셈보다 빠름
• 음수 표현은 2의 보수 (1의 보수 + 1)
• 1바이트 = 8비트 = 16진수 2자리, 2¹⁰ = 1,024
• BCD는 1010 ~ 1111을 사용하지 않는다
• 2진 ↔ 8진 = 3비트씩, 2진 ↔ 16진 = 4비트씩 묶기 (8=2³, 16=2⁴)
• 8진 ↔ 16진은 반드시 2진수를 경유
• 10진 → 2진은 큰 자릿값부터 빼기가 나눗셈보다 빠름
• 음수 표현은 2의 보수 (1의 보수 + 1)
• 1바이트 = 8비트 = 16진수 2자리, 2¹⁰ = 1,024
• BCD는 1010 ~ 1111을 사용하지 않는다