I. 자료와 자료 구조

3. 진법 변환 (10↔2↔16) · 약 5분

← 전체 목차 이 단원 목차

10진수를 2진수로 바꾸는 법만 확실히 알면 나머지는 같은 패턴이에요.

📌 이 강의가 길면 ① 10→2진, ② 2→10진만 먼저 보고, ③④·파이썬 실습은 나중에 이어서 보세요.

🎮 게임에서 쓰는 곳 (언더테일·RPG)

세이브 파일의 HP, 골드, 플래그는 결국 숫자로 저장돼요. 메모리에는 0과 1(2진수)로 들어가고, 16진수는 색상 코드(#FF5500 같은)나 바이너리 덤프에서 자주 보입니다. 진법을 알면 "이 숫자가 게임 안에서 어떻게 비트로 쓰이는지"가 보여요.

진법 변환 — 규칙만 네 개

① 10진수 → 2진수

2로 나눈 나머지를 적고, 몫을 다시 2로 나누는 걸 몫이 0될 때까지 반복. 적어 둔 나머지를 맨 아래→맨 위 순서로 읽으면 2진수.

예: 13을 2진수로 — 한 줄에 한 번 나눗셈, 나머지만 오른쪽에 적기:

25라면: 25÷2=12…1, 12÷2=6…0, 6÷2=3…0, 3÷2=1…1, 1÷2=0…1 → 11001₂

② 2진수 → 10진수

오른쪽부터 자리가 2⁰, 2¹, 2², … 그 자리 숫자×자리값을 더함.

1101₂ = 1×8+1×4+0×2+1×1 = 13

③ 10진수 → 16진수

2 대신 16으로 나눈 나머지. 10~15는 A~F. 나머지를 아래→위로 읽음.

255 → 나머지 F,F → FF₁₆

④ 2진수 ↔ 16진수

2진수 4자리 = 16진수 1자리 (0000=0, 1111=F). 네 자리씩 묶어서 바꿈.

1111 1010₂ = FA₁₆

문제 및 해설 (정답 숨김)

10진수 25를 2진수로 바꾸면?
정답 보기

정답: 11001₂

한 줄에 한 번씩 나눗셈하면:

실습 — 손으로 풀어 보기

아래 문제를 풀어 본 뒤, 클릭해서 정답을 확인하세요.

실습 1. 10진수 18을 2진수로 바꾸면?
정답 보기

정답: 10010₂

18÷2=9…0, 9÷2=4…1, 4÷2=2…0, 2÷2=1…0, 1÷2=0…1 → 나머지를 아래→위로 읽으면 10010₂. 파이썬: bin(18)'0b10010'

실습 2. 10진수 7을 2진수로 바꾸면?
정답 보기

정답: 111₂

7÷2=3…1, 3÷2=1…1, 1÷2=0…1 → 111₂. 2³−1=7이라 2진수는 1이 세 개.

실습 3. 2진수 1010₂를 10진수로 바꾸면?
정답 보기

정답: 10

오른쪽부터 2⁰, 2¹, 2², 2³ → 0×1 + 1×2 + 0×4 + 1×8 = 2+8 = 10. 파이썬: int('1010', 2) → 10

실습 4. 2진수 1111₂를 10진수로 바꾸면?
정답 보기

정답: 15

1×1+1×2+1×4+1×8 = 15. 또는 2⁴−1=15이므로 4자리 2진수 최댓값.

실습 5. 10진수 100을 16진수로 바꾸면?
정답 보기

정답: 64₁₆

100÷16=6…4, 6÷16=0…6 → 나머지를 아래→위로 읽으면 64₁₆. 파이썬: hex(100)'0x64'

실습 6. 2진수 1101 1010₂를 16진수로 바꾸면? (4자리씩 묶기)
정답 보기

정답: DA₁₆

1101₂ = 8+4+0+1 = 13 = D, 1010₂ = 8+0+2+0 = 10 = A → DA₁₆. 파이썬: hex(0b11011010)'0xda'

도전과제

조금 더 생각해 보면 풀 수 있어요. 풀어 본 뒤 정답을 펼쳐 확인하세요.

도전 1. 2진수 11010₂를 10진수와 16진수로 각각 바꾸면?
정답 보기

10진수: 26 (0×1+1×2+0×4+1×8+1×16 = 2+8+16 = 26)

16진수: 1A₁₆ (26÷16=1…10 → 나머지 10=A, 1 → 1A₁₆. 또는 11010을 0001 1010으로 묶으면 1, 10=A)

도전 2. 16진수 1A₁₆를 10진수와 2진수로 각각 바꾸면?
정답 보기

10진수: 26 (1×16 + 10×1 = 16+10 = 26)

2진수: 11010₂ (26을 2로 나눈 나머지: 26÷2=13…0, 13÷2=6…1, 6÷2=3…0, 3÷2=1…1, 1÷2=0…1 → 11010₂. 또는 1=0001, A=10=1010 → 00011010)

도전 3. 게임에서 HP가 50일 때, 이 값을 2진수와 16진수로 각각 쓰면? (세이브/메모리에서 어떻게 저장되는지 생각해 보기)
정답 보기

2진수: 110010₂ (50÷2=25…0, 25÷2=12…1, 12÷2=6…0, 6÷2=3…0, 3÷2=1…1, 1÷2=0…1 → 110010₂)

16진수: 32₁₆ (50÷16=3…2, 3÷16=0…3 → 32₁₆)

파이썬으로 확인: bin(50)'0b110010', hex(50)'0x32'

도전 4. 10진수 255를 2진수와 16진수로 바꾸면? (게임에서 색상·픽셀 값으로 자주 쓰이는 수예요)
정답 보기

2진수: 11111111₂ (8비트로 나타낼 수 있는 최댓값. 2⁸−1=255)

16진수: FF₁₆ (255÷16=15…15 → 15=F이므로 FF₁₆. 2진수 1111 1111을 4자리씩 묶어도 F,F)

색상 코드에서 #FF0000(빨강), #00FF00(초록)처럼 한 채널 최댓값이 255(=FF₁₆)예요.

문제 및 답 확인 (빈칸 채우기)

13을 2로 나눈 나머지 네 개를 쓰고, 그 나머지를 아래→위로 읽은 2진수를 넣은 뒤 [확인]을 누르세요.

13÷2=6 나머지 → 6÷2=3 나머지 → 3÷2=1 나머지 → 1÷2=0 나머지

문제 및 실습

같은 방식으로 다른 숫자도 2진수·16진수로 바꿔 보세요. 아래에서 파이썬으로 바로 확인할 수 있어요.

📌 이론(진법 변환) ↔ 파이썬 함수

진법 변환 10진→2진/16진 → bin(), hex()  |  2진/16진 문자열→10진 → int(문자열, 밑)

대응 정수 → 2진수/16진수 문자열로 바꿀 때 쓰는 내장 함수예요.

bin(정수)
2진수 문자열로 바꿔요. bin(25)'0b11001' (0b는 2진수 표시).
hex(정수)
16진수 문자열로 바꿔요. hex(25)'0x19'. 역으로 문자열을 정수로: int('11001', 2) → 25.

왜 쓰나요? 손으로 나머지 구한 결과를 코드로 검증할 때 위 함수를 쓰면 됩니다.

🐍 파이썬으로 실습 (이 페이지 안에서)