필요한 툴을, 바로 쓸 수 있게

진법 변환기

255는 2진수로 1111 1111, 8진수로 377, 16진수로 FF입니다. 아래 다섯 칸 가운데 아무 칸에나 수를 넣으면 나머지 진법이 바로 바뀌고, 음수는 비트판에서 2의 보수 패턴으로, 0.1 같은 소수는 되풀이되는 자리까지 보여 줍니다. 나눗셈 사다리와 자리값 풀이로 바꾸는 과정도 확인할 수 있습니다.

최종 수정 2026-10-22계산은 브라우저 안에서만 처리
예시

비트판칸을 누르면 그 비트가 0과 1로 바뀝니다

    풀이

    최종 수정 2026-10-22입력값은 저장하지 않습니다

    ROBERIN 기준필요한 툴을,
    바로 쓸 수 있게.
    • 바로 보이는 화면입력 위치와 결과 위치를 또렷하게 둡니다.
    • 결과 먼저핵심 결과를 앞에 두고, 과정은 필요할 때만 보여줍니다.
    • 요구 줄이기가입이나 불필요한 정보 입력 없이 바로 쓰게 합니다.

    진법은 같은 수를 몇 개의 숫자로 적느냐의 차이입니다

    진법은 한 자리에 쓰는 숫자의 개수입니다. 10진법은 0~9 열 개로 적고 자리가 하나 올라갈 때마다 값이 10배가 되며, 2진법은 0과 1 두 개로 적고 자리마다 2배가 됩니다. 그래서 255는 10진수로 세 자리지만 2진수로는 1111 1111 여덟 자리, 16진수로는 FF 두 자리입니다. 값은 같고 적는 방식만 다릅니다.

    이 도구는 2·8·10·16진수 칸과 직접 고르는 진법 칸(2~36진법)을 나란히 두고, 어느 칸에 넣어도 나머지 칸을 바로 다시 적습니다. 정수뿐 아니라 음수와 소수, 1,000자리 큰 수도 반올림 없이 바꾸고, 2진수로 끝나지 않는 소수는 되풀이되는 부분을 괄호로 표시합니다. 아래의 비트판과 풀이는 컴퓨터가 그 수를 어떻게 저장하는지, 손으로는 어떻게 바꾸는지를 보여 줍니다.

    진법을 바꿔야 하는 상황

    사람은 10진수로 세지만 컴퓨터는 모든 값을 0과 1의 비트로 저장합니다. 비트를 그대로 읽기에는 너무 길어서, 프로그래머는 비트 4개를 16진수 한 자리로, 비트 3개를 8진수 한 자리로 줄여 적습니다. 그래서 아래와 같은 일을 할 때 진법을 오가게 됩니다.

    • 색 코드: CSS 색 #1E90FF는 16진수 두 자리씩 빨강·초록·파랑의 세기를 나타냅니다. 00이 가장 약하고 FF(10진수 255)가 가장 강하며, 1E는 30, 90은 144입니다.
    • 파일 권한: 리눅스의 chmod 755에서 각 자리는 8진수이고, 2진수 세 자리로 읽기(4)·쓰기(2)·실행(1)을 켜고 끕니다. 7은 111이라 읽기·쓰기·실행이 모두 켜지고, 5는 101이라 쓰기만 꺼집니다.
    • 네트워크: 서브넷 마스크 255.255.255.0은 네 칸이 각각 8비트라서 2진수로 바꾸면 1이 24개, 0이 8개입니다. 그래서 같은 마스크를 /24로 줄여 씁니다.
    • 메모리와 바이트: 1바이트(8비트)는 16진수 두 자리(00~FF)에 꼭 맞습니다. 메모리 주소, 해시값, 파일 내용을 들여다볼 때 16진수로 보는 이유입니다.
    • 음수 해석: 컴퓨터의 정수 변수는 −5를 부호와 5로 나눠 저장하지 않고, 8비트라면 1111 1011 같은 2의 보수 패턴으로 저장합니다. 통신 기록에서 FB를 보고 그것이 −5인지 251인지 가려야 할 때 폭과 부호를 함께 따져야 합니다.
    • 소수 오차: 0.1은 2진수로 끝나지 않아 컴퓨터는 가장 가까운 값으로 반올림해 저장합니다. 그래서 JavaScript에서 0.1 + 0.2를 계산하면 0.3이 아니라 0.30000000000000004가 나옵니다.
    • 수학 숙제: 5진법이나 3진법처럼 10이 아닌 진법으로 수를 적고 바꾸는 문제는 나눗셈과 자리값으로 풉니다. 풀이 칸이 그 과정을 그대로 보여 줍니다.

    쓰는 법

    1. 원래 수가 적힌 진법의 칸에 수를 넣습니다. 16진수 FF라면 16 칸에, 2진수 1010이라면 2 칸에 넣으면 나머지 칸이 바로 바뀝니다.
    2. 3진법·5진법·36진법처럼 다른 진법은 다섯째 칸 왼쪽에서 진법(2~36)을 고른 뒤 넣습니다.
    3. 음수는 앞에 −를 붙이고, 소수점은 마침표(.)로 적습니다. 되풀이되는 소수는 0.1(6)처럼 반복 부분을 괄호로 묶습니다. 0x·0b·0o 접두사와 공백·밑줄(_)로 묶은 자릿수는 그대로 넣어도 됩니다.
    4. 비트판에서 폭(8·16·32·64비트)을 고르면 그 폭의 2의 보수 패턴과 16진수 패턴이 보입니다. 칸을 누르면 그 비트만 뒤집힌 값이 위 칸에 들어갑니다.
    5. 풀이에서 바꿀 진법을 고르면 나눗셈 사다리와 자리값 계산이 나옵니다. 복사 단추는 묶음 공백을 빼고 값만 복사하며, 링크 복사는 지금 값을 다시 여는 주소를 만듭니다.

    진법마다 쓰는 숫자

    10보다 큰 진법은 10부터 알파벳을 씁니다. A가 10, F가 15이고 Z가 35라서 36진법까지 적을 수 있습니다. Python의 int()와 JavaScript의 toString()도 2~36진법을 받습니다. 알파벳은 대문자와 소문자를 같은 숫자로 읽습니다.

    같은 값 255를 진법별로 적은 모습
    진법쓰는 숫자255코드 접두사자주 보는 곳
    2진법0, 11111 11110b비트, 플래그, 마스크
    8진법0~73770o파일 권한
    10진법0~9255없음일상의 숫자
    16진법0~9, A~FFF0x색 코드, 메모리, 해시
    36진법0~9, A~Z73없음짧은 식별 번호

    n진수를 10진수로: 자리값을 곱해 더하기

    오른쪽 끝 자리부터 n⁰, n¹, n², …을 차례로 곱해 모두 더합니다. 16진수 1ED는 1 × 16² + 14 × 16¹ + 13 × 16⁰ = 256 + 224 + 13 = 493입니다. 소수점 아래 자리는 n⁻¹, n⁻², …을 곱하므로, 2진수 0.101은 1/2 + 0/4 + 1/8 = 0.625입니다.

    16진수 1ED를 자리값으로 펼치기
    자리16²16¹16⁰합
    숫자1E (14)D (13)
    자리값256161
    숫자 × 자리값25622413493

    10진수를 n진수로: 정수는 나누고, 소수는 곱하기

    정수 부분은 n으로 나눈 나머지를 옆에 적으면서 몫을 다시 n으로 나눕니다. 몫이 n보다 작아지면 멈추고, 마지막 몫부터 나머지를 아래에서 위로 읽습니다. 학교에서 쓰는 나눗셈 사다리가 이 방법이며, 위 풀이 칸이 같은 모양으로 그립니다.

    13을 2진수로: 마지막 몫 1에서 시작해 나머지를 위로 읽으면 1101
    나누기몫나머지
    13 ÷ 261
    6 ÷ 230
    3 ÷ 211
    위로 읽기1101

    소수 부분은 반대로 n을 곱합니다. 곱한 결과의 정수 부분을 떼어 적고, 남은 소수 부분에 다시 n을 곱하기를 소수 부분이 0이 될 때까지 되풀이합니다. 0.625 × 2 = 1.25에서 1, 0.25 × 2 = 0.5에서 0, 0.5 × 2 = 1에서 1을 떼므로, 뗀 숫자를 위에서 아래로 읽은 0.101이 답입니다.

    2진수로 끝나지 않는 소수

    소수를 기약분수로 고쳤을 때 분모의 소인수가 모두 그 진법의 소인수이면 소수가 끝나고, 다른 소인수가 하나라도 있으면 같은 자리가 끝없이 되풀이됩니다. 2진법의 소인수는 2뿐이라 분모가 2의 거듭제곱인 0.5·0.25·0.125는 끝나지만, 0.1 = 1/10은 분모에 5가 있어 0.0(0011)처럼 0011이 끝없이 되풀이됩니다. 10진법에서 1/3이 0.333…으로 끝나지 않는 것과 같은 이치입니다.

    괄호 안은 끝없이 되풀이되는 부분
    10진수분수2진수16진수
    0.51/20.10.8
    0.251/40.010.4
    0.1251/80.0010.2
    0.753/40.110.C
    0.11/100.0(0011)0.1(9)
    0.21/50.(0011)0.(3)
    0.33/100.0(1001)0.4(C)
    0.(3)1/30.(01)0.(5)

    컴퓨터의 소수(IEEE 754 배정밀도)는 2진 유효숫자 53비트에서 반올림하므로, 0.1은 정확히 1/10이 아니라 0.1000000000000000055511151231257827021181583404541015625로 저장됩니다. 그래서 0.1을 세 번 더한 값은 0.3과 정확히 같지 않습니다. 이 도구는 값을 분수로 들고 계산하기 때문에 반올림 없이 되풀이 부분까지 보여 줍니다.

    2진수와 8·16진수는 묶어서 바로 바꿉니다

    16은 2⁴, 8은 2³이므로 2진수를 오른쪽부터 4자리씩 묶으면 16진수 한 자리가 되고, 3자리씩 묶으면 8진수 한 자리가 됩니다. 10진수를 거칠 필요가 없습니다. 예를 들어 1 1110 1101은 앞에 0을 채워 0001 1110 1101로 묶으면 1·E·D, 즉 16진수 1ED이고, 3자리씩 111 101 101로 묶으면 8진수 755입니다.

    2진수 4자리와 16진수 한 자리
    2진수16진수2진수16진수2진수16진수2진수16진수
    0000001004100081100C
    0001101015100191101D
    00102011061010A1110E
    00113011171011B1111F

    음수와 2의 보수

    위의 칸들은 음수를 −5처럼 부호와 크기로 적습니다. 하지만 컴퓨터의 정수 변수는 부호를 따로 두지 않고 2의 보수로 저장합니다. 양수 패턴의 비트를 모두 뒤집고 1을 더하면 같은 크기의 음수 패턴이 됩니다. 8비트에서 5는 0000 0101이고, 비트를 뒤집으면 1111 1010, 여기에 1을 더한 1111 1011(16진수 FB)이 −5입니다. 맨 왼쪽 비트가 1이면 음수로 읽으며, 같은 1111 1011을 부호 없는 수로 읽으면 251이 됩니다.

    8비트 패턴을 두 가지로 읽은 값
    8비트 패턴16진수부호 없이2의 보수로
    0111 11117F127127
    0000 00010111
    0000 00000000
    1111 1111FF255−1
    1111 1011FB251−5
    1000 000080128−128
    비트 폭별로 담을 수 있는 정수(Java의 정수형과 같은 범위)
    폭부호 없이2의 보수로Java 정수형
    8비트0 ~ 255−128 ~ 127byte
    16비트0 ~ 65,535−32,768 ~ 32,767short
    32비트0 ~ 4,294,967,295−2,147,483,648 ~ 2,147,483,647int
    64비트0 ~ 18,446,744,073,709,551,615−9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807long

    값이 고른 폭에 다 들어가지 않으면 위쪽 비트가 잘립니다. 300을 8비트에 넣으면 아래 8비트인 0010 1100만 남아 44가 되는데, 비트판에서 폭을 8로 고르면 이렇게 잘린 모습과 경고가 함께 보입니다.

    자주 틀리는 경우

    • 진법을 잘못 고른 채 넣기: 1010을 10진수 칸에 넣으면 천십이고, 2진수 칸에 넣어야 10입니다. 수의 모양이 같아도 어느 진법으로 읽느냐에 따라 값이 완전히 달라집니다.
    • 접두사를 다른 칸에 넣기: 0x는 16진수를 뜻하므로 10진수 칸에서는 읽을 수 없습니다. 이 도구는 그럴 때 16진수 칸으로 옮기는 단추를 보여 줍니다.
    • 알파벳 O와 숫자 0, 소문자 l과 숫자 1: O는 24, L은 21을 뜻하는 숫자라서 25진법·22진법 이상에서만 쓸 수 있습니다. 16진수에는 A~F까지만 있습니다.
    • 쉼표를 소수점으로 쓰기: 이 도구와 프로그래밍 언어는 소수점을 마침표로 적습니다. 쉼표는 10진수 칸에서 1,024처럼 세 자리 묶음으로 쓸 때만 읽습니다.
    • 앞에 붙은 0: 0755와 755는 같은 수입니다. 다만 C 언어 코드에서는 0으로 시작하는 정수를 8진수로 읽으므로, 10진수를 적을 때는 앞에 0을 붙이지 않습니다.
    • 폭을 정하지 않고 2의 보수 읽기: FB는 8비트 2의 보수로 −5이지만, 16비트 00FB로 보면 251입니다. 몇 비트 값인지 먼저 정해야 음수인지 알 수 있습니다.

    한계

    • 숫자는 1,000자리까지 넣을 수 있습니다. JavaScript의 보통 숫자는 2⁵³ − 1(9,007,199,254,740,991)을 넘으면 정확도를 잃지만, 이 도구는 BigInt 분수로 계산해 그 범위를 넘어도 끝자리까지 맞습니다.
    • 소수 부분은 256자리 안에서 끝나거나 되풀이가 시작되지 않으면 그 뒤를 …로 줄여 보여 줍니다. 계산은 분수로 하므로 다른 칸의 값에는 오차가 쌓이지 않지만, …로 줄인 칸을 직접 고치면 줄인 자리까지만 읽습니다.
    • 비트판은 정수만, 128비트까지 그립니다. 그보다 큰 수는 2진수 칸에서 전체를 확인합니다.
    • 부동소수점(IEEE 754)의 비트 배치, 고정 소수점, 음의 진법, 진법끼리의 덧셈·뺄셈 같은 연산은 다루지 않습니다.
    • 모든 계산은 이 브라우저 안에서만 하며, 넣은 값을 서버로 보내지 않습니다.

    기준: 진법과 접두사 규칙은 Python 설명서와 ECMAScript 명세, 2의 보수 범위는 Java 언어 명세, 권한·색·네트워크 예시는 POSIX·CSS·RFC 문서를 2026년 10월 22일에 확인했습니다. 표의 값은 이 도구의 계산 코어로 다시 계산해 대조했습니다.

    출처

    자주 묻는 질문

    10진수를 2진수로 어떻게 바꾸나요?

    2로 나눈 나머지를 옆에 적으면서 몫을 다시 2로 나누고, 몫이 1이 되면 멈춥니다. 마지막 몫 1부터 나머지를 아래에서 위로 읽으면 2진수입니다. 13은 6 나머지 1, 3 나머지 0, 1 나머지 1이 나와 1101입니다.

    2진수를 10진수로 바꾸는 방법은 무엇인가요?

    오른쪽 끝 자리부터 1, 2, 4, 8, 16처럼 2의 거듭제곱을 곱해 더합니다. 1010은 8 + 0 + 2 + 0이라 10이고, 1111 1111은 128부터 1까지 모두 더해 255입니다.

    16진수 FF는 10진수로 얼마인가요?

    255입니다. F는 15를 뜻하므로 15 × 16 + 15 = 255가 되고, 2진수로는 1111 1111, 8진수로는 377입니다. 1바이트가 담을 수 있는 가장 큰 값이라 색 코드에서 가장 밝은 단계로 쓰입니다.

    음수는 2진수로 어떻게 적나요?

    사람이 적을 때는 −101처럼 앞에 −를 붙이지만, 컴퓨터는 2의 보수로 저장합니다. 양수 패턴의 비트를 모두 뒤집고 1을 더하므로, 8비트에서 −5는 0000 0101을 뒤집은 1111 1010에 1을 더한 1111 1011(16진수 FB)입니다. 비트판에서 폭을 골라 확인할 수 있습니다.

    0.1을 2진수로 바꾸면 왜 끝나지 않나요?

    0.1은 1/10이고 분모 10에 5가 들어 있는데, 2진법은 소인수가 2뿐이라 5로 나누어떨어지게 적을 수 없기 때문입니다. 그래서 0.0(0011)처럼 0011이 끝없이 되풀이되고, 컴퓨터는 53비트에서 반올림해 저장하므로 0.1 + 0.2가 0.3과 정확히 같지 않습니다.

    2진수를 16진수나 8진수로 빨리 바꾸는 방법이 있나요?

    있습니다. 2진수를 오른쪽부터 4자리씩 묶으면 16진수 한 자리, 3자리씩 묶으면 8진수 한 자리가 됩니다. 1 1110 1101은 4자리씩 0001 1110 1101로 묶어 1ED, 3자리씩 111 101 101로 묶어 755입니다.

    0x, 0b, 0o는 무엇인가요?

    코드에서 수의 진법을 알려 주는 접두사입니다. 0x는 16진수, 0b는 2진수, 0o는 8진수를 뜻하며 Python과 JavaScript가 이 표기를 씁니다. 이 도구는 접두사를 붙여 넣어도 읽고, 보기에서 접두사를 켜면 붙인 채 복사합니다.

    몇 진법까지, 몇 자리까지 바꿀 수 있나요?

    2진법부터 36진법까지 바꿀 수 있습니다. 10부터 35는 A부터 Z로 적고 대소문자는 같은 숫자로 읽습니다. 숫자는 1,000자리까지 넣을 수 있으며, 큰 수도 BigInt 분수로 계산해 끝자리까지 정확합니다.