숫자 진법 변환

브라우저 안에서만 처리됩니다. 입력한 내용과 선택한 파일은 서버로 전송되지 않습니다.

진법 변환

2진수
8진수
10진수
16진수
다른 진법

16자리 · 64비트 · 부호 있는 정수로는 64비트로도 모자람 · 부호 없는 정수로는 64비트

0x 0b 0o 접두사와 자리 구분용 밑줄·공백을 그대로 받습니다. 16진수 칸에는 0123456789abcdef 를 씁니다.

2의 보수

같은 비트 무늬라도 몇 비트 정수로 읽느냐에 따라 값이 달라집니다. 0xFFFFFFFF 는 부호 없는 32비트로는 4,294,967,295 이고 부호 있는 32비트로는 -1 입니다.

비트 무늬 (16진수)부호 없는 정수부호 있는 정수담기는가
8비트0xff255-1잘림
16비트0xffff65,535-1잘림
32비트0xffffffff4,294,967,295-1잘림
64비트0xffffffffffffffff18,446,744,073,709,551,615-1부호 없는 쪽만

"잘림" 은 값이 그 폭에 들어가지 않아 위쪽 비트가 버려졌다는 뜻입니다. C 의 형변환과 같은 동작이고, 버린 값은 되돌릴 수 없습니다.

비트 연산

두 번째 값
0x0000 00ff · 255

0000 0000 0000 0000 0000 0000 1111 1111

0xffff fffe · 4 294 967 294

1111 1111 1111 1111 1111 1111 1111 1110

NOT (~a) = 0x00000000 · 서 있는 비트 32개 / 32개

사용법

  1. 아무 칸에나 값을 칩니다. 치는 순간 나머지 칸이 전부 따라 바뀝니다. 0x·0b·0o 접두사와 자리 구분용 밑줄·공백은 그대로 받습니다.
  2. 맨 아래 칸의 진법을 2부터 36 사이에서 골라 쓸 수 있습니다. 36진법은 0–9 와 a–z 를 씁니다.
  3. "2의 보수" 칸에서 같은 비트 무늬가 8·16·32·64비트에서 각각 어떤 값이 되는지 봅니다. 0xFFFFFFFF 가 42억인지 -1 인지가 여기서 갈립니다.
  4. "비트 연산" 칸에서 두 값의 AND·OR·XOR 과 시프트·회전을 계산합니다. 폭을 먼저 고르세요 — 폭이 없으면 NOT 과 시프트의 답이 정해지지 않습니다.

자주 묻는 질문

입력한 값이 서버로 전송되나요?

아니요. 계산이 전부 브라우저 안에서 실행됩니다. 입력한 값은 서버로 가지 않고 어디에도 저장되지 않으며, 페이지를 닫으면 사라집니다.

아주 큰 수도 정확한가요?

정확합니다. 자바스크립트의 기본 숫자는 2의 53제곱(약 9천조)을 넘으면 정수를 정확히 담지 못합니다. 예를 들어 9007199254740993 을 그대로 읽으면 9007199254740992 가 되어 마지막 1 이 사라지고, 0xFFFFFFFFFFFFFFFF 는 18446744073709552000 으로 끝 네 자리가 바뀝니다. 진법 변환기를 쓰는 사람이 실제로 붙여넣는 값이 하필 그 위쪽(64비트 아이디, 주소, 해시)이라, 이 도구는 자릿수 제한이 없는 정수형으로만 계산합니다. 한 번에 10만 자리까지 읽습니다.

2의 보수가 뭔가요?

음수를 비트로 나타내는 방법입니다. 맨 앞 비트가 서 있으면 음수로 읽고, 값은 그 무늬에서 2의 폭제곱을 뺀 값입니다. 그래서 8비트 0xFF 는 255 이기도 하고 -1 이기도 합니다 — 어느 쪽인지는 그 값을 몇 비트 부호 있는 정수로 보느냐에 달렸고, 비트 무늬만으로는 알 수 없습니다. 음수 쪽이 한 칸 더 넓은 것도 이 방식의 성질입니다(8비트는 -128 부터 127 까지).

"잘림" 이라고 나오는 건 무슨 뜻인가요?

값이 그 폭에 들어가지 않아 위쪽 비트가 버려졌다는 뜻입니다. 예를 들어 300 을 8비트로 보면 44 가 됩니다(300 − 256). C 를 비롯한 대부분의 언어에서 형변환이 하는 것과 같은 동작이고, 버려진 비트는 되돌릴 수 없습니다. 이 도구는 잘린 경우를 조용히 넘기지 않고 표에 적습니다.

오른쪽 시프트가 두 가지인 이유는?

부호를 어떻게 다룰지가 다릅니다. 산술 시프트(>>)는 맨 앞 비트를 그대로 복사해 채우므로 음수가 음수로 남습니다 — 8비트에서 0x80(-128)을 한 칸 밀면 0xC0(-64)입니다. 논리 시프트(>>>)는 언제나 0 을 채우므로 0x80 이 0x40 이 됩니다. 맨 앞 비트가 0 인 값에서는 둘의 결과가 같아서, 양수만 시험하면 차이를 못 보고 지나갑니다.

NOT 결과가 왜 폭에 따라 달라지나요?

뒤집을 비트가 몇 개인지가 폭이기 때문입니다. 0x0F 를 8비트에서 뒤집으면 0xF0 이지만 16비트에서는 0xFFF0 입니다. 폭을 정하지 않으면 답이 하나로 정해지지 않아서, 이 도구는 폭을 반드시 고르게 합니다. 시프트도 같은 이유로 폭이 필요합니다 — 왼쪽으로 밀려 폭을 넘어간 비트는 사라져야 하는데, 폭을 모르면 어디서 사라질지 알 수 없습니다.

16진수 칸에 0b1f 를 넣으면 어떻게 되나요?

0x0b1f, 즉 2847 로 읽습니다. 0b 는 2진수 접두사이기도 하지만 16진수에서는 그냥 두 자리 숫자입니다. 이 도구는 접두사처럼 보이더라도 전체가 그 칸의 진법으로 읽히면 접두사로 보지 않습니다. 반대로 10진수 칸에 0b1010 을 넣으면 b 가 10진수에 없는 글자라 접두사로 보고, 2진수 칸에 넣으라고 알려 줍니다.

자리 구분은 어떤 기준으로 묶나요?

뒤에서부터 묶습니다. 2진수와 16진수는 네 자리씩(한 자리 16진수가 네 비트라 서로 맞아떨어집니다), 8진수와 10진수를 비롯한 나머지는 세 자리씩입니다. 앞에서부터 묶으면 자리값이 어긋나서 몇 번째 비트인지 셀 수 없게 됩니다. 복사 버튼은 구분자를 뺀 값을 넘기므로 그대로 붙여넣어도 됩니다.