실무 노하우 & 이슈 대응

전자공학 초보자를 위한 이진수(2진수)·16진수 변환법 — “숫자 번역기”가 되는 가장 쉬운 길

doillabs 2026. 2. 19. 20:05
728x90

🔢 전자공학 초보자를 위한 이진수(2진수)·16진수 변환법 — “숫자 번역기”가 되는 가장 쉬운 길

안녕하세요 😊 전기전자학과에서 오래 강의도 하고, 현장에서도 PCB/회로 쪽 콘텐츠를 오래 써온 도일랩스입니다. 전자공학 처음 시작할 때, 다들 한 번은 이런 순간이 와요. “왜 10진수 말고 2진수, 16진수로 괴롭히는 거야…?” 😵‍💫 그런데요, 이게 괴롭히려고 만든 게 아니라 회로가 숫자를 다루는 방식이랑 개발/디버깅 속도를 위해서예요. 마치 “한국어 ↔ 영어” 번역처럼, 숫자도 상황에 따라 쓰는 언어가 다르거든요. 오늘 글에서는 이진수(2진수)·10진수·16진수 변환법을 “암기”가 아니라 “원리 + 습관”으로 정리해 드릴게요. 커피 한 잔 ☕ 옆에 두고 따라오시면, 이제 숫자 앞에서 쫄지 않게 됩니다!
카테고리 : 전자공학 기초 / 디지털 논리 / 임베디드 기초

1) 2진수·10진수·16진수, 왜 전자공학에서 같이 쓰나요? 🤔

전자공학에서 숫자는 “그냥 숫자”가 아니라, 전압의 상태(High/Low)를 표현하는 약속이에요. 회로 입장에선 “켜짐/꺼짐” 두 가지만 안정적으로 판단할 수 있으니, 자연스럽게 2진수(0과 1)가 기본 언어가 됩니다. 그런데 우리가 일상에서 쓰는 건 10진수죠. 그래서 사람은 10진수로 생각하고, 기계는 2진수로 일합니다. 문제는… 2진수는 길이가 길어져요. 예를 들어 255를 2진수로 쓰면 11111111 (8자리) 😅. 이때 등장하는 게 16진수입니다. 16진수는 4비트(2진수 4자리)를 한 글자로 압축해줘요. 그래서 개발자/회로쟁이들이 디버깅할 때 “헥사(0x…)”를 사랑합니다. 비유하자면, 2진수는 “기계가 읽기 편한 스펠링”, 16진수는 “사람이 읽기 편한 약어” 같아요. 그리고 10진수는 “우리 일상 언어”라고 생각하시면 딱 감이 옵니다 😊 실제로 데이터시트 레지스터 맵, MCU 메모리 주소, 디버거 출력, 로직애널라이저 값 등이 16진수로 쏟아져요. 그러니 변환은 “시험용”이 아니라 현장 생존 스킬입니다.
기억 한 줄 : 2진수=회로 언어, 10진수=사람 언어, 16진수=압축된 사람 친화 언어

2) 2진수 ↔ 10진수 변환법 (계산 원리 + 예시) 🧮

2진수에서 10진수로 바꾸는 건 의외로 단순해요. 핵심은 자리값(가중치)입니다. 10진수는 (1,10,100,1000…) 자리값이 커지죠. 2진수는 (1,2,4,8,16,…)로 커집니다. 즉, 오른쪽부터 2^0, 2^1, 2^2…의 자리값을 갖고, 그 자리의 비트가 1이면 더하고 0이면 무시하면 됩니다. 예를 들어 2진수 10110₂을 10진수로 바꿔볼게요. (아래 표처럼 자리값을 깔끔히 적어주면 실수가 확 줄어요!)
2진수 자리 비트 값 자리값(2의 거듭제곱) 기여도(비트×자리값)
2^4 자리 1 16 16
2^3 자리 0 8 0
2^2 자리 1 4 4
2^1 자리 1 2 2
2^0 자리 0 1 0
그래서 합치면 16 + 0 + 4 + 2 + 0 = 22. 즉, 10110₂ = 22₁₀ 입니다. 여기서 초보자 분들이 자주 하는 실수는 “자리값을 왼쪽부터 1,2,4…”로 적다가 헷갈리는 것인데요. 습관은 딱 하나! 항상 오른쪽 끝을 2^0으로 놓고 출발하세요. 오른쪽이 출발점이에요. 마치 집 주소에서 “동/호”부터 정확히 적는 느낌? 🏠

3) 10진수 ↔ 2진수 변환법 (나눗셈/가중치) — 실수 줄이는 습관 ✅

10진수에서 2진수로 바꾸는 대표 방법은 2로 계속 나누고 나머지를 거꾸로 읽기예요. 처음 보면 “이걸 왜 이렇게 돌아가?” 싶지만, 해보면 딱 맞아떨어집니다. 왜냐하면 2진수는 결국 2의 거듭제곱의 조합이라서, 나눗셈 과정이 그 조합을 자동으로 찾아주거든요. 예를 들어 22₁₀을 2진수로 바꾸면:
  • 22 ÷ 2 = 11 … 나머지 0
  • 11 ÷ 2 = 5 … 나머지 1
  • 5 ÷ 2 = 2 … 나머지 1
  • 2 ÷ 2 = 1 … 나머지 0
  • 1 ÷ 2 = 0 … 나머지 1 (끝)
나머지를 위에서 아래로 적으면 0,1,1,0,1인데, 거꾸로 읽어야 합니다. 그래서 10110₂. “거꾸로?”가 헷갈리면 이렇게 비유해볼게요. 나눗셈 과정은 “계단 내려가기”이고, 정답은 “계단 올라오며 본 풍경”이에요 😄 실무에서는 빠르게 검산하는 습관이 중요합니다. 변환 결과가 맞는지 확인하려면, 아까 배운 가중치 방식으로 2진수→10진수를 한 번만 해보면 끝! 그리고 또 하나: 짝수는 끝자리가 0, 홀수는 끝자리가 1입니다. (이거 하나만 기억해도 디버깅 때 감이 빨라져요!)

4) 2진수 ↔ 16진수 변환법 (4비트 묶기) — 개발자들이 좋아하는 이유 😎

2진수와 16진수 변환이 쉬운 이유는 딱 하나예요. 16 = 2^4 이기 때문입니다. 즉, 2진수 4자리(4비트)를 묶으면 16진수 한 자리로 “딱” 떨어져요. 이게 얼마나 편하냐면요… 디버거에서 0x3F 같은 값을 보면, 숙련자는 머릿속에서 바로 “0011 1111”로 펼쳐봅니다. 방법은 간단합니다:
규칙 : 2진수는 오른쪽부터 4비트씩 끊기 → 각 묶음을 16진수로 바꾸기 (4비트가 모자라면 왼쪽에 0을 채워도 OK!)
예) 10110₂ → 오른쪽부터 4비트씩: 1 0110 → 왼쪽 묶음은 4비트로 맞춰 0001 0110 그러면 0001=1, 0110=6 → 0x16 (즉, 16진수 16) 입니다. 초보자 분들이 특히 좋아할 팁: 16진수는 A~F가 나오는데요, 이건 10~15를 한 글자로 표현한 거예요. A=10, B=11, C=12, D=13, E=14, F=15 — 마치 학점(A,B,C…)처럼 “등급표”라고 생각하면 덜 부담스럽습니다 😄

5) 16진수 ↔ 10진수 변환법 (자리값) — 레지스터/주소 감 잡기 🧭

16진수에서 10진수로 변환도 “자리값”만 알면 끝납니다. 10진수는 (1,10,100…), 2진수는 (1,2,4…), 16진수는 (1,16,256,4096…) 즉 16^0, 16^1, 16^2… 입니다. 예를 들어 0x2A를 10진수로 바꿔볼까요? 0x2A는 “(2 × 16^1) + (A × 16^0)” 입니다. 여기서 A는 10이죠. 즉, 2×16 + 10×1 = 32 + 10 = 42. 그래서 0x2A = 42₁₀ 🎯 실무에서 이 감각이 중요한 이유가 있어요. 예를 들어 메모리 주소가 0x20000000처럼 나오면, “아 이건 SRAM 쪽이네” 같은 느낌으로 구조를 이해하는 데 도움이 되거든요(물론 MCU마다 맵은 다르지만, ‘자리값 감각’이 있으면 훨씬 빨리 익숙해집니다).
16진수 의미(10진수) 설명 2진수(4비트)
0x0 0 모두 0 0000
0x9 9 일반 숫자 1001
0xA 10 A는 10 1010
0xF 15 4비트 최대 1111
0x10 16 자리 올림(16) 0001 0000

6) 현장 꿀팁: 변환 실수 패턴 & 빠른 체크리스트 🧰

“변환법은 알겠는데, 나는 자꾸 틀려요…” 😭 이런 말, 정말 많이 들었습니다. 저도 학생 때는 똑같았어요. 그런데 틀리는 이유는 대부분 일정합니다. 자리값을 잘못 매김, 나머지를 거꾸로 안 읽음, 4비트 묶기를 왼쪽부터 함 같은 패턴이 반복돼요. 그래서 아래 체크리스트만 지키면, 정확도가 확 올라갑니다.
  • 2진수→10진수: 오른쪽 끝을 2^0으로 시작했는지 확인하기
  • 10진수→2진수: 2로 나눈 나머지를 반드시 거꾸로 읽기
  • 2진수→16진수: 오른쪽부터 4비트씩 끊고, 부족하면 왼쪽에 0 채우기
  • 16진수 자리값: 오른쪽부터 16^0, 16^1, 16^2…로 가중치 주기
  • 빠른 감별: 10진수 짝수/홀수는 2진수 끝자리(0/1)로 즉시 체크
  • 디버깅 습관: 0xFF는 255, 0x00은 0, 0x0F는 15 같은 “자주 나오는 값”은 자주 보며 익히기
현장 한 줄 팁 : 로직애널라이저/디버거 값은 보통 16진수로 나오니, 4비트 묶기만 익혀도 체감 난이도가 확 내려갑니다. “길고 복잡한 2진수”를 “짧은 16진수”로 접어 넣는 느낌이라고 생각하면, 뇌가 덜 피곤해요 😄

FAQ) 초보자가 가장 자주 묻는 질문 6가지 💬

16진수에 왜 0x를 붙이나요?

표기 실수 방지용 “라벨”이에요. 2A가 10진수인지 16진수인지 헷갈릴 수 있죠. 그래서 프로그래밍/데이터시트에서 0x2A처럼 “이건 16진수야!”라고 표시합니다.

2진수 변환에서 나머지를 왜 거꾸로 읽죠?

나눗셈은 “최하위 비트(LSB)”부터 뽑아내는 과정이라서 그래요. 처음 나온 나머지가 가장 오른쪽 비트이고, 마지막에 나온 나머지가 가장 왼쪽 비트가 됩니다. 그래서 거꾸로 읽으면 자릿수가 정확히 맞아요.

A~F를 자꾸 까먹어요. 좋은 방법 있나요?

A=10부터 시작해서 1씩 증가”만 기억하세요. A(10), B(11), C(12), D(13), E(14), F(15). 자주 보는 값은 0x0F=15, 0x10=16, 0xFF=255 정도만 먼저 몸에 붙이면 훨씬 편해집니다 😊

2진수에서 왼쪽에 0을 붙여도 되나요?

네, 값은 변하지 않습니다. 0011과 11은 같은 수예요. 특히 16진수 변환할 때 4비트 묶기를 위해 왼쪽에 0을 채우는 건 “정석”입니다.

실무에서는 어떤 진법을 가장 많이 쓰나요?

로그/디버깅/레지스터 주소는 16진수, 비트 마스크/플래그 설명은 2진수, 계산/설명은 10진수가 많습니다. 결국 셋을 오가게 되니, 변환은 “툴”처럼 익혀두면 좋아요.

변환 빨리 하는 비법이 있나요?

2진수↔16진수는 4비트 묶기로 거의 “반사”처럼 되게 만들고, 16진수↔10진수는 자주 쓰는 값(0xFF, 0x7F, 0x80, 0x10 등)을 생활화하면 속도가 확 붙습니다. 저는 예전에 디버깅할 때 0x3F가 보이면 “아, 0011 1111이네” 하고 자동으로 떠오르게 훈련했어요 😄

🔧 도일랩스(Doil Labs) 소식
전자부품 제조와 ITEM 기반 제품 개발(기획~양산 대응), 조립·포장까지 한 번에 진행해야 할 때가 있죠. 그런 “현장형 고민”이 생기면 도일랩스(www.doillabs.com)에서 기업 정보와 문의 채널을 확인해보세요. 정직과 신뢰를 기반으로 고객 요구에 맞춘 제조/개발/조립 지원을 한다는 점이 강점입니다 😊

마무리) 숫자 변환은 “공부”가 아니라 “손에 익히는 도구”예요 🧡

오늘은 이진수(2진수)·10진수·16진수 변환법을 원리부터 실무 습관까지 쭉 정리해봤습니다. 처음엔 낯설어도, 이건 자전거 타기랑 비슷해요. 머리로는 “균형 잡아야지” 알지만, 결국은 몇 번 넘어지며 몸이 기억하죠 🚲😄 여러분도 디버거에서 0x 값이 보일 때 “아… 이게 무슨 뜻이지?”라는 순간이 올 텐데, 그때 이 글의 4비트 묶기만 떠올려도 한결 편해질 거예요. 혹시 연습문제(예: 0x7B를 10진수로 바꾸기, 156을 2진수로 바꾸기 등)도 원하시면 댓글 느낌으로 요청 주세요. 제가 “실수 포인트”까지 콕 집어서 같이 풀어드릴게요 😊

👉 다음 포스팅 예고: “비트마스크(bit mask)와 AND/OR/XOR — 레지스터 설정이 갑자기 쉬워지는 순간” 😎

초보자용 · for beginners

진수 변환기

2진수 · 10진수 · 16진수 — 원리부터 실무까지 🚲

이진수 (Binary) 입력
10진수 (Decimal) 입력
16진수 (Hex) 입력 — 0x 생략 가능
🔵 4비트씩 묶어보기 — 비트 시각화
📐 단계별 풀이 (Step-by-step)
← 위에 숫자를 입력하면 여기에 풀이가 나와요!
📋 4비트 빠른 참조표 (0~15)
제작 · www.doillabs.com  ·  초보자를 위한 개발 학습 도구
728x90