MiServe DevTools

내 스티커

도구를 여기에 고정하세요. 이 브라우저에 저장됩니다.

진법 변환기

크기에 제한 없는 정수를 2진수, 8진수, 10진수, 16진수와 2진법부터 36진법까지의 모든 진법 사이에서 변환하고, 2의 보수 표현도 보여 줍니다.

절댓값의 비트 길이
부호 있는 정수(2의 보수)에 필요한 비트 수
고정 폭 정수(2의 보수)로 표현
폭16진수2진수부호 있는 값부호 없는 값
8비트
16비트
32비트
64비트

브라우저에서 실행됩니다. 붙여 넣은 내용은 업로드되지 않습니다.

이 도구에 대하여

같은 수, 다른 진법

진법(기수, radix)은 위치 기수법에서 쓰는 서로 다른 숫자의 개수입니다. 10진수는 10개, 2진수는 2개, 8진수는 8개, 16진수는 16개를 쓰며, 16진수는 10부터 15까지의 값에 a부터 f를 빌려 씁니다. 36진법까지는 알파벳을 이어서 z까지 사용합니다.

2진수는 하드웨어가 숫자를 저장하는 방식입니다. 16진수는 이를 짧게 적는 방법으로, 16진수 한 자리가 정확히 4비트이고 두 자리가 1바이트입니다. 8진수는 지금도 Unix 파일 권한에 쓰이며, 한 자리가 3비트입니다.

이 페이지의 모든 필드는 같은 정수를 보여 줍니다. 어느 필드를 수정해도 나머지가 함께 바뀝니다.

입력할 수 있는 형식

1111_0000이나 1 000 000처럼 숫자 사이를 공백이나 밑줄로 구분할 수 있고, 앞에 마이너스 기호를 붙일 수 있습니다. 접두사 0b, 0o, 0x는 그 문자가 해당 필드의 숫자가 아닌 경우에 각각 2진수, 8진수, 16진수를 선택합니다. 10진수 필드에 입력한 0xff는 255로 읽지만, 16진수 필드의 0b1은 16진수 B1입니다.

변환에는 임의 정밀도 정수 타입인 JavaScript의 BigInt를 사용하므로 반올림되는 값이 없습니다. 크기 제한은 브라우저의 JavaScript 엔진이 BigInt에 두는 제한뿐이며, 이를 넘는 숫자는 해당 필드에 오류로 표시됩니다. 일반 JavaScript 숫자가 정밀도를 잃기 시작하는 9,007,199,254,740,991보다 큰 수도 정확히 변환됩니다. 정수만 지원하며 소수는 지원하지 않습니다.

음수와 2의 보수

필드는 음수를 마이너스 기호와 절댓값으로 표시합니다. 컴퓨터는 이를 다르게 저장합니다. 2의 보수에서는 음수에 2를 폭만큼 거듭제곱한 값을 더해 저장합니다. 8비트에서는 그 값이 256이므로 -1은 255, 즉 ff로, -128은 128, 즉 80으로 저장됩니다.

표는 값이 들어가는 경우 8, 16, 32, 64비트의 비트 패턴을 보여 주고, 그 패턴을 부호 있는 정수와 부호 없는 정수로 다시 읽었을 때의 값도 보여 줍니다. 그래서 8비트에서 255와 -1은 같은 패턴 ff를 가집니다.

자주 묻는 질문

2진수를 10진수로 직접 변환하려면 어떻게 하나요?

2진수의 각 자리는 오른쪽 끝의 1부터 시작하는 2의 거듭제곱 값을 가집니다. 숫자가 1인 자리의 값을 모두 더하면 됩니다. 1011은 8 + 2 + 1이므로 11입니다.

프로그래밍에서 16진수를 자주 쓰는 이유는 무엇인가요?

16진수 한 자리는 정확히 4비트를 나타내므로, 1바이트는 항상 16진수 두 자리입니다. 그래서 메모리 덤프, 색상, 해시, 비트 마스크를 2진수보다 훨씬 짧게 쓸 수 있고, 비트로 다시 옮기기도 쉽습니다.

이 변환기는 얼마나 큰 숫자까지 처리할 수 있나요?

도구 자체에는 제한이 없습니다. 임의 정밀도 정수를 사용하므로 수천 자리 숫자도 정확히 변환됩니다. 입력이 아주 길면 계산에 시간이 더 걸리며, 브라우저마다 JavaScript 엔진이 정수 하나에 허용하는 최대 크기가 있습니다. 그 크기를 넘는 숫자는 해당 필드에 오류로 표시됩니다.

2의 보수란 무엇인가요?

거의 모든 컴퓨터가 부호 있는 정수를 저장하는 방식입니다. 최상위 비트가 음의 가중치를 가지므로, 8비트 값의 범위는 -128부터 127까지이고 -1은 여덟 비트가 모두 1인 값으로 저장됩니다.

인코딩의 다른 도구