본문 바로가기

진법 변환 이해하기 - 2진수, 8진수, 16진수 원리와 계산법을 예제로 정리

101010 같은 2진수가 암호처럼 보이시나요? 자릿값 하나만 이해하면 진법 변환은 쉬워집니다. 10진수 42를 직접 변환해 보면서 색상 코드, 파일 권한 같은 실무 활용까지 한 번에 정리했습니다.


진법 변환 이해하기 - 2진수, 8진수, 16진수 원리와 계산법을 예제로 정리

개발 공부를 시작하면 한 번쯤 마주치는 벽이 있습니다. 101010 같은 2진수, #FF5733 같은 16진수 표기입니다. 분명 숫자인데 읽는 법을 모르니 암호처럼 느껴집니다. 그런데 사실 진법 변환 이해하기는 생각보다 어렵지 않습니다. 자릿값이라는 원리 하나만 잡으면 2진수든 16진수든 같은 방식으로 읽을 수 있습니다.

진법이란 무엇인가

진법은 숫자를 표기하는 규칙입니다. 우리가 쓰는 10진법은 0부터 9까지 10개의 숫자를 사용하고, 한 자리가 꽉 차면 윗자리로 올림을 합니다. 여기서 핵심은 자리마다 가중치가 다르다는 점입니다.

예를 들어 425라는 수는 4 x 100 + 2 x 10 + 5 x 1입니다. 각 자리의 가중치가 오른쪽부터 1, 10, 100으로 10배씩 커집니다. 2진법은 이 가중치가 1, 2, 4, 8, 16처럼 2배씩 커질 뿐, 원리는 완전히 같습니다.

진법 변환의 핵심은 암기가 아니라 자릿값입니다. 어떤 진법이든 오른쪽 자리부터 밑수를 거듭제곱한 가중치를 곱해 더하면 10진수 값이 나옵니다.

2진수, 8진수, 16진수 비교

컴퓨터는 전기 신호의 켜짐과 꺼짐, 즉 0과 1만 구분할 수 있어서 내부적으로 2진법을 사용합니다. 문제는 2진수가 사람이 읽기에 너무 길다는 것입니다. 그래서 2진수를 짧게 줄여 쓰는 용도로 8진법과 16진법이 함께 쓰입니다.

진법사용하는 숫자10진수 42의 표기주요 용도
2진법0, 1101010컴퓨터 내부 연산, 비트 플래그
8진법0~752리눅스 파일 권한(chmod)
10진법0~942일상적인 숫자 표기
16진법0~9, A~F2A색상 코드, 메모리 주소, 유니코드

16진법에서 A는 10, B는 11, 이렇게 F는 15를 뜻합니다. 16진법이 특히 많이 쓰이는 이유는 다음과 같습니다.

  • 16진수 한 글자가 정확히 2진수 4자리(4비트)와 일치해서 상호 변환이 빠릅니다.
  • 1바이트(8비트)를 딱 두 글자로 표현할 수 있습니다. 예를 들어 11111111은 FF입니다.
  • 2진수 8자리를 읽는 것보다 16진수 2자리를 읽는 쪽이 실수가 훨씬 적습니다.

10진수를 2진수로 바꾸는 계산법

가장 기본이 되는 방법은 2로 나누면서 나머지를 기록하는 것입니다. 10진수 42를 예로 들어 보겠습니다.

42 ÷ 2 = 21 나머지 0
21 ÷ 2 = 10 나머지 1
10 ÷ 2 = 5 나머지 0
5 ÷ 2 = 2 나머지 1
2 ÷ 2 = 1 나머지 0
1 ÷ 2 = 0 나머지 1

몫이 0이 될 때까지 나눈 뒤, 나머지를 아래에서 위로 읽으면 101010이 됩니다. 즉 10진수 42는 2진수로 101010입니다.

거꾸로 확인하기

변환이 맞는지 검산하려면 자릿값을 더해 보면 됩니다. 101010의 각 자리는 오른쪽부터 1, 2, 4, 8, 16, 32의 가중치를 가집니다. 1이 있는 자리만 더하면 32 + 8 + 2 = 42. 정확히 맞아떨어집니다. 이 검산 습관을 들이면 변환 실수를 바로 잡아낼 수 있습니다.

16진수와 2진수의 빠른 변환

16진수와 2진수 사이의 변환은 나눗셈이 필요 없습니다. 2진수를 오른쪽부터 4자리씩 끊어서 각 묶음을 16진수 한 글자로 바꾸면 끝입니다.

101010을 4자리씩 끊으면 0010 1010이 됩니다. 앞의 0010은 2, 뒤의 1010은 10이므로 A. 따라서 2진수 101010은 16진수 2A입니다. 반대 방향도 마찬가지로, 16진수 한 글자를 2진수 4자리로 펼치기만 하면 됩니다.

팁: 윈도우 기본 계산기를 열고 메뉴에서 프로그래머 모드를 선택하면 숫자를 입력하는 즉시 2진수, 8진수, 16진수가 한 화면에 표시됩니다. 손으로 계산한 결과를 검증할 때 활용하기 좋습니다.

실무에서 진법이 쓰이는 곳

진법은 시험용 지식이 아니라 지금도 곳곳에서 쓰이고 있습니다.

  • 색상 코드: #FF5733에서 FF, 57, 33은 각각 빨강, 초록, 파랑의 세기를 16진수로 나타낸 값입니다. FF는 10진수로 255, 즉 최대치입니다.
  • IP 주소: 192.168.0.1의 각 숫자는 8비트, 즉 0부터 255까지의 범위를 가집니다. 2진수 8자리가 한 칸인 셈입니다.
  • 유니코드와 이스케이프: 프로그래밍에서 문자를 코드로 지정할 때 16진수를 사용합니다.

실제로 API 응답을 JSON 포매터로 정리하다 보면 \uD55C 같은 유니코드 이스케이프를 자주 보게 되는데, u 뒤의 네 글자가 바로 문자 번호를 16진수로 적은 것입니다. 정규식에서도 \x41처럼 16진수로 문자를 지정할 수 있어서, 정규식 테스터에 \x41 패턴을 넣고 대문자 A가 매칭되는 것을 직접 확인해 보면 감이 확실히 잡힙니다.

참고: 리눅스의 chmod 755 명령에서 755는 8진수입니다. 7은 2진수로 111이라 읽기, 쓰기, 실행 권한이 모두 켜진 상태를 뜻하고, 5는 101이라 읽기와 실행만 허용된 상태를 뜻합니다.

오늘 바로 해볼 수 있는 연습

진법 변환은 눈으로 읽는 것보다 손으로 몇 번 해 보는 쪽이 훨씬 빨리 익숙해집니다. 두 가지만 해 보시길 권합니다.

  • 자신의 나이나 좋아하는 숫자를 2로 나누는 방법으로 2진수로 바꾸고, 자릿값 검산까지 해 보세요. 세 번만 반복하면 원리가 몸에 붙습니다.
  • 지금 쓰는 웹사이트에서 색상 코드 하나를 골라 두 글자씩 끊어 10진수로 바꿔 보세요. 16진수가 더 이상 암호로 보이지 않을 것입니다.
3일 무료체험큰손탐지기, 지금 바로 시작하세요

설치 없이 웹에서 바로 사용 가능 · PC & 모바일 지원

무료체험 시작
카카오톡 상담