처음으로 기본 변환으로 인해 작업 저녁 시간이 걸렸을 때 범인은 권한 버그였습니다. 배포 스크립트는 파일 모드를 다음과 같이 작성했습니다 chmod 755그리고 구성 로더는 JSON 파일에서 숫자와 동일한 값을 읽습니다 755. JSON 에는 8 진법 리터럴이 없습니다. 로더가 통과했습니다 755 8진 모드를 예상한 시스템 호출에 대해 모드는 10진수 755로 해석되었으며 2진수에서는 10진수 755로 해석되었습니다 1011110011- 9비트 필드에 10비트의 말도 안되는 소리가 있습니다. 파일은 결국 아무도 요청하지 않았고 누구도 설명할 수 없는 권한으로 끝났습니다.
이것이 실제로 밑변의 혼란이 보이는 모습입니다. 거의 결코 어려운 수학 문제가 아닙니다. 한 표기법에서는 정확하고 다른 표기법에서는 파국적인 값으로,아무도 어떤 밑변이 의도되었는지 적지 않은 경계를 넘어 이동합니다. 이진수,8 진수,10 진수,16 진수는 같은 정수를 쓰는 네 가지 방법이며,컴퓨터는 행복하게 그것들을 섞을 수있게합니다.
그래서 나는 을 만들었습니다 숫자 베이스 변환기 에 Toolz.dev 그 순간에 내가 실제로 도달하는 것이 되려면: 값을 붙여넣고, 어떤 베이스에 있는지 말하고, 다른 모든 베이스에서 한 번에 확인하세요. 비트 수, 바이트 수, 니블에 배치된 이진수와 함께 위의 16진수와 일직선이 됩니다. 2부터 36까지의 모든 기수를 처리합니다 0x, 0b, 그리고 0o 접두사이며 BigInt에서 모든 산술을 수행하므로 256비트 해시는 조용히 가비지로 반올림하는 대신 정확하게 변환됩니다.
TL;DR: A number's 값은 변환할 때 절대 변하지 않습니다 - 표기법만 변경됩니다. The 숫자 베이스 변환기 2 에서 36 까지의 모든 염기 사이의 정수를 변환하고,이진수, 8 진수,십진수 및 16 진수를 동시에 표시하고,비트 및 바이트 길이를 보고하고,BigInt 를 사용하므로 어떤 크기에서도 정밀도가 유지되며 브라우저에서 완전히 실행됩니다.
주요 특징
2~36기준
이진,8 진수,소수, 16 진수는 실제 코드에 나타나는 4 개이기 때문에 전용 바로 가기 버튼을 얻습니다. 그러나 소스 및 대상 드롭 다운은 2 진수에서 36 진수까지 전체 범위를 실행합니다 - 천장은 대소문자를 구분하지 않는 영숫자 (열 자리 숫자 더하기 26 글자) 가 부족한 지점입니다. 3 진수,12 진수,20 진수,32 진수,36 진수는 모두 한 번의 클릭으로 떨어져 있으며 각각 표준으로 렌더링됩니다 0-9A-Z 숫자 알파벳.
정확한 Bigint 산술
이것은 가장 중요하고 마케팅 카피에서 가장 적게 나타나는 기능입니다. 자바스크립트 번호는 IEEE-754 double 이며,정수는 정확히 2^53 − 1 까지만 나타내며,이는 9,007,199,254,740,991 입니다. 그 과거에는 parseInt 그리고 Number 반올림 시작 - 오류 없이 묵묵히, 그럴듯하게 보이고 잘못된 값을 생성합니다.웹의 대부분의 기본 변환기는 정확히 그러한 함수를 기반으로 구축됩니다.
이것은 BigInt 누산기(BigInt 누산기)로 숫자를 한 자리씩 구문 분석합니다value = value * base + digit) 과 반복 분할에 의해 다시 밖으로 렌더링합니다. 정밀 천장이 없습니다. 64 비트 ID,256 비트 해시,RSA 모듈러스,500 자리 소수 - 모두 정확하게 변환합니다.
모든 기지를 한 번에
하나의 입력,네 개의 출력,라이브. 패널은 이진,팔진, 십진수,육진수를 동시에 보여주고,그 네 가지 중 하나가 아닌 경우 선택한 사용자 정의 기반을 더합니다. 대부분의 기본 변환은 실제로 교차 확인입니다 - 디버거의 16 진수와 로그 라인의 십진수가 같은 숫자임을 확인하고 싶습니다 - 그리고 네 가지를 한 번에 모두 보는 것은 3 단계 작업을 한눈에 보여줍니다.
비트 길이, 바이트 길이 및 니블 그룹화
사람들이 바이너리로 변환하는 이유는 일반적으로 비트에 대한 호기심이 아니라 크기 조정 질문입니다: 이것은 바이트에 맞습니까,32 비트 int 에서,서명 된 짧은에서? 그래서 변환기는 유효 비트 길이 (255 → 8 비트,256 → 9 비트) 를보고하고 바이트 길이는 반올림. 바이너리 출력은 니블의 정수에 패딩되고 4 로 그룹화되므로 4 비트의 각 그룹은 인코딩하는 16 진수 자리 바로 아래에 위치합니다.
용서하는 입력, 정확한 오류
실제 가치는 장식과 함께 도착합니다. 0xDEADBEEF 스택 추적에서, 0b1010_1111 녹 문자 그대로에서, 0o755 chmod에서, FF FF FF 16 진수 편집기에서 복사됩니다. 모두 허용됩니다: 선택한 밑수와 일치하면 접두사가 제거되고 밑줄과 공백은 숫자 구분 기호로 처리됩니다.
선택한 베이스에 대해 숫자가 불법이면 오류 이름이 지정됩니다. 유형 1092 8진수에서 얻습니다 "9" is not valid in base 8. Base 8 uses 0-7.- 일반 "invalid input"가 아니라 어떤 문자를 보러 가야하는지 아무것도 알려주지 않습니다.
음수 지원
음수 값은 선행 마이너스 부호로 변환하고 렌더링합니다. 그것이 부호-크기 표기법이며,아래 two's complement 섹션에서 다루는 이유 때문에 정직한 대답입니다.
브라우저에서 완전히 실행됩니다
네트워크 왕복도,업로드도, 로깅도 없습니다. 산술이 몇 마이크로초 떨어진 곳에서 일어나고 있고 페이지가 로드된 후에는 전혀 연결되지 않은 상태로 계속 작동하기 때문에 모든 키 입력에 대한 결과가 업데이트됩니다.
숫자 베이스 변환기 사용 방법
1 단계: 번호를 입력하십시오
From 필드에 값을 입력하거나 붙여 넣습니다. 먼저 장식을 벗길 필요가 없습니다 - 0xFF, 0b1010, 0o755, 1010_1111, 그리고 DE AD BE EF 모두 받아들여집니다. 선도 + 그리고 - 부호는 작동합니다. 선행하는 영은 무해합니다.
2 단계: 소스 베이스 선택
변환기에게 입력한 내용을 읽는 방법을 알려주세요. 이것은 사람들이 건너뛰는 단계이고,중요한 단계입니다: 101 는 이진수 5,팔진수 65,소수수 101,16 진수 257 입니다. 네 개의 다른 숫자,한 문자열입니다. 바로 가기 버튼은 이진수,팔진수, 소수점,그리고 16 진수를 커버; 드롭 다운은 2 에서 36 까지 모든 것을 커버합니다.
소스 베이스가 입력한 문자를 읽을 수 없으면 무음 오답이 아닌 해당 문자의 이름을 지정하는 메시지가 나타납니다.
3 단계: 목표 베이스 선택
원하는 베이스를 골라냅니다. 입력하면 결과가 즉시 나타나고 업데이트됩니다. - 기다릴 서버가 없기 때문에 변환 버튼이 없습니다. 스왑 버튼은 방향을 반대로 바꿔 결과를 입력으로 이동시키며,이는 값을 왕복하고 생존을 확인하는 가장 빠른 방법입니다.
4 단계: 패널을 읽으십시오
변환 아래에서:
- 모든 기지를 한 번에- 이진수, 8진수, 10진수, 16진수로 동일한 값에 사용자 정의 기준을 더한 값입니다.
- 비트 길이, 바이트 길이, 16진수- 크기 조정 번호.
- 그룹화된 바이너리- 비트가 패딩 처리되어 16진수에 맞춰 니블로 분할됩니다.
5 단계: 복사
맨 결과를 복사하거나 전체 표현식을 복사합니다(255 (base 10) = FF (base 16)) 변환이 커밋 메시지,코드 주석 또는 버그 보고서에서 자체 문서화되도록 할 때 두 번째 옵션은 숫자를 숫자와 함께 기본을 전달하기 때문에 다른 사람에게 숫자를 설명할 때 사용하는 옵션입니다.
위치 표기법이 실제로 작동하는 방식
우리가 사용하는 모든 베이스는 a입니다 위치적인 system,즉 digit's 기여도는 어디에 위치하느냐에 따라 달라집니다. b 진법에서 i 위치의 숫자 (오른쪽 0 부터 세는) 는 가치가 있습니다 digit × b^i. 그 단일 규칙은 모든 기반을 생성합니다.
1,234를 십진수로 구합니다:
1×10³ + 2×10² + 3×10¹ + 4×10⁰ = 1000 + 200 + 30 + 4 = 1234
이제 가져가세요 1A3 16진수에서 A는 10입니다:
1×16² + 10×16¹ + 3×16⁰ = 256 + 160 + 3 = 419
같은 규칙,다른 베이스. 그리고 10101111 이진수로:
1×2⁷ + 0 + 1×2⁵ + 0 + 1×2³ + 1×2² + 1×2¹ + 1×2⁰ = 128 + 32 + 8 + 4 + 2 + 1 = 175
이 규칙에서 벗어나는 두 알고리즘은 전체 변환기입니다:
밑변 b 에서 숫자를 읽는 것 는 왼쪽에서 오른쪽으로 접습니다. 0 에서 시작하며,각 자리수마다: value = value × b + digit. 이것은 Horner's 방법이고,왜 변환기가 결코 계산할 필요가 없는지 입니다 b^i 명시적으로 - 지수화 없음, 부동 소수점 없음, 누적 오류 없음.
밑 c 에 값을 쓰는 것 는 반복 나눗셈입니다. c 로 나누고 나머지를 다음 자리로 유지 (오른쪽에서) 0 에 도달할 때까지 몫으로 반복합니다. 뒤로 읽는 나머지가 자릿수입니다.
두 연산 모두 정수에 대해 정확하므로 BigInt 에서 수행하면 파이프라인의 어느 곳에서도 반올림이 없는 변환을 제공합니다. 값 123456789012345678901234567890 은 16 진수로 변환됩니다 18EE90FF6C373E0EE4E3F0AD2- 97 비트,13 바이트 - 그리고 다시 정확히 당신이 시작했던 십진수로 변환합니다. 에 구축된 변환기에서 시도해 보세요 parseInt.
숫자 알파벳에 대해 주목할 가치가있는 한 가지 세부 사항이 있습니다. Base 36 은 대소문자를 구분하지 않는 ASCII 영숫자로 작성할 수있는 마지막 기본이기 때문에 실용적인 천장입니다: 0-9 10자리 숫자를 알려드립니다 A-Z 스물 여섯 더,그리고 10 + 26 = 36 을 제공합니다. 그것을 밀어 당신은 더 이상 산술 표기법을하고 있지 않습니다 경우 감도 (베이스 62) 또는 기호 알파벳 (Base64) 이 필요합니다 - 당신은 이진 - 텍스트 인코딩을하고 있습니다,이는 다른 규칙과 다른 작업입니다. 그것이 실제로 필요한 경우,사용 Base64 변환기 대신.
왜 16 진수 지도는 이진에 너무 깨끗하게
Hex 는 컴팩트하기 때문에 프로그래밍에서 인기가 없습니다. Base 10 은 인간의 친숙도 측면에서 동일한 값에 대해 Base 16 보다 컴팩트하며 컴팩트 함이 목표라면 base 36 을 사용합니다. Hex 는 한 가지 구조적 이유로 승리했습니다: 16 은 24 입니다.
즉,16 진수 자리 하나가 정확히 4 개의 이진 자리 - 하나의 니블 - 를 인코딩하며,그들 사이의 경계를 넘어서는 캐리가 전혀 없습니다. 매핑은 산술 연산이 아닌 조회 테이블입니다:
| 이진 | 헥스 | 이진 | 헥스 |
|---|---|---|---|
| 0000 | 0 | 1000 | 8 X 1000 X 1000 X 1000 X 1000 X 1000 X 100 X 80 X 100 X 80 X 80 X 80 X 80 X 80 X 80 X 8 |
| 0001 | 1 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 100 X 100 X | 1001 | 9 X 1000 X 1000 X 1000 X 100 X 100 X 100 X 100 X 100 X 100 X 100 X 100 X 100 X 100 X 1 |
| 0010 | 2 X 2000 X 2000 X 2000 X 2000 X 2000 X 2000 X 2000 X 2000 X 2000 X 2000 X 2000 X 200 | 1010 | A |
| 0011 | 3 X 1000 X 1000 X 1000 X 100 X 100 X 100 X 30 X 30 X 30 X 30 X 30 X 30 X 30 X 30 X 30 X | 1011 | 비 |
| 0100 | 4 X 1000 X 1000 X 1000 X 400 X 40 X 40 X 40 X 40 X 40 X 40 X 40 X 40 X 40 X 40 X 40 X 40 | 1100 | 씨 |
| 0101 | 5 X 1000 X 1000 X 1000 X 100 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 | 1101 | 디 |
| 0110 | 6 X 1000 X 1000 X 1000 X 100 X 60 X 60 X 60 X 60 X 60 X 60 X 60 X 60 X 60 X 60 X 60 X 60 | 1110 | 이자형 |
| 0111 | 7 X 1000 X 1000 X 1000 X 1000 X 100 X 100 X 100 X 100 X 100 X 70 X 100 X 70 X 70 X 70 X | 1111 | 에프 |
개종시키다 11111111 로 분할하여 1111 1111, 테이블에서 각 니블을 읽고 연결합니다: FF. 산술이 없습니다. 변환 0xDEADBEEF 각 숫자를 확장하여 이진수로: 1101 1110 1010 1101 1011 1110 1110 1111. 구조는 살아납니다.
바이트는 8비트이고 16진수는 4이기 때문입니다 1바이트는 항상 정확히 2개의 16진수입니다. 0x00 통해 0xFF 가능한 모든 바이트를 포함하므로 16진수 덤프, MAC 주소, 색상 코드 및 메모리 주소가 모두 16진수로 작성됩니다. 0xFF 한 눈에 당신이 하나의 전체 바이트를 보고 있다는 것을 알려줍니다. 소수점 255 는 당신에게 그런 종류의 것을 전혀 알려주지 않습니다 - 당신은 255 가 28 − 1 이라는 것을 알아야 하며,65535 와 4294967295 에 대해서도 같은 회상을 해야 합니다.
Octal 은 8 = 2³와 같은 원리로 작동하므로 8 진수 한 자리는 정확히 세 비트입니다. 이것이 바로 Unix 파일 권한이 8 진수인 이유입니다: 모드는 세 비트로 구성된 세 그룹 (읽기,쓰기, 사용자,그룹, 기타에 대해 실행) 이며 세 비트는 한 8 진수입니다. chmod 755 이다 111 101 101- 그리고 이제 숫자는 당신이 외운 마법의 숫자 대신에 무언가를 의미합니다. 그것은 또한 내 권한 버그가 일어난 이유입니다: 755 소수에서는 그렇지 않습니다 755 8진수에는 문자열에 대한 내용이 없습니다 755 어느 쪽인지 발표합니다. The 숫자 베이스 변환기 부분적으로는 3초 안에 그 질문을 해결할 수 있도록 존재합니다.
Two's Complement, 그리고 이 도구가 마이너스 기호를 사용하는 이유
입력 -42 그리고 변환기가 돌아옵니다 -101010. 어떤 사람들은 기대한다 11010110 그리고 마이너스 기호를 버그로 간주하십시오. 그것은 아니며,그 이유는 바이너리에 대해 가장 오해되는 단일 것이기 때문에 이해할 가치가 있습니다.
Two's complement 는 숫자의 속성이 아닙니다. 고정폭 레지스터의 속성입니다.
값 −1 은 표준 이진 표현이 없다. 8 비트 two's complement register 에서 그것은 11111111 (0xFF). 16 비트에서 그것은 0xFFFF. 32 비트에서, 0xFFFFFFFF. 64비트에서는 16개의 F가 있습니다. 이는 동일한 비트 패턴을 작성하는 네 가지 다른 방법이 아닙니다; 그들은 4개입니다 다른 비트 패턴그리고 어떤 것이 올바른지는 숫자가 아닌 유형 선언에 있는 너비에 전적으로 따라 달라집니다.
임의의 정밀도 정수 - 이것이 BigInt 인 무엇이며,이 변환기가 작동하는 것은 - 너비가 없습니다. 따라서 추가적인 컨텍스트없이 의미있는 유일한 표현은 sign-magnitude 입니다: minus sign 다음에 magnitude's digits 가 오는 것입니다. 그것이 당신이 얻는 것이며,자신있게 잘못된 것이 아니라 정직한 대답입니다.
당신이 때 하다 두 & # 39;s 보완 패턴이 필요하고, 조리법은 간단하며, 이 도구에서 실행할 수 있습니다:
- 너비를 결정하고,
n비트. - 계산하다
2^n + value(와 함께value부정). 8 개 조금에 있는 −42 를 위해: 256 − 42 = 214. - 214 를 목표 베이스로 변환:
11010110이진수로,D6헥스에서.
여러분이 배웠을 수도 있는 기계적 단축키 - 모든 비트를 반전시킨 다음 하나를 더하면 - 는 같은 결과를 만들어냅니다. 왜냐하면 x 의 n 비트를 모두 반전시키면 (2^n − 1) − x, 그리고 하나를 추가하면 제공됩니다 2^n − x. 산술 항등식은 동일한 연산입니다; 비트 뒤집기 버전은 구분선 없이 수행하는 방식입니다.
사람들이 실제로 사용하는 너비에 대한 빠른 참조:
| 폭 | 범위(서명) | 16진수에서 −1 | 가장 음수 값 |
|---|---|---|---|
| 8비트 | −128~127 | FF |
80 (−128) |
| 16비트 | −32,768에서 32,767 | FFFF |
8000 |
| 32비트 | −2,147,483,648 ~ 2,147,483,647 | FFFFFFFF |
80000000 |
| 64비트 | ±9.22×10¹8 | FFFFFFFFFFFFFFFF |
8000000000000000 |
모든 행의 비대칭성에 주목하세요: 양수보다 음수 값이 하나 더 있습니다. 왜냐하면 0 은 양수 쪽의 슬롯을 차지하기 때문입니다. 그것이 가장 음수인 정수를 부정하는 것이 그 자체로 반환되는 고전적인 오버플로 버그의 소스입니다. 만약 여러분이 값의 비트나 문자열을 직접 배치한 것을 보고 싶다면,the 이진 변환기 는 그것을 위한 동반 도구이다.
Base 36은 무엇을 위한 것인가?
Base 36은 호기심처럼 보이며 실제로 "exotic" 중 가장 실용적으로 유용합니다. 한 가지 이유: 대소문자를 접고 인간이 입력한 후 탈출하지 않고 URL에 삭제되어도 살아남는 가장 밀도가 높은 숫자 표기법입니다.
베이스 간에 동일한 64 비트 값 비교:
| 베이스 | 64비트 값에 필요한 숫자입니다 | 예 |
|---|---|---|
| 이진수 (2) | 64 | 1111... |
| 소수점 (10) | 20 | 18446744073709551615 |
| 16진수(16) | 16 | FFFFFFFFFFFFFFFF |
| 베이스 36 | 13 | 3W5E11264SGSF |
| 베이스 62 | 11 | 대소문자를 구분합니다 |
Base 36 은 16 진수보다 35%, 10 진수보다 35% 절약되며, URL 경로에서 안전하고, 파일 이름에서 안전하고, 전화를 통해 모호하지 않으며, 사용자가 캡으로 입력하든 그렇지 않든 동일한 문자만 사용하여 짧은 링크 ID, 송장 번호, 쿠폰 코드, 주문 참조 및 컴팩트 타임스탬프에 표시되는 이유입니다. Date.now().toString(36) 짧고 정렬 가능하며 사람이 입력할 수 있는 ID를 생성하는 일반적인 트릭입니다.
절충안은 가독성입니다: 3W5E11264SGSF 는 hex 로 할 수 있는 방법으로 structure 를 위해 eyeball 할 수 있는 것이 아니며,36 이 2 의 거듭제곱이 아니기 때문에 깨끗한 비트 정렬이 없습니다. 숫자가 불투명한 식별자이고 목표가 콤팩트일 때 base 36 을 사용하고 number's 비트 구조가 포인트일 때 hex 를 사용합니다.
일반적인 사용 사례
메모리 및 16 진수 덤프를 디버깅합니다. 디버거가 표시됩니다 0x7FFE4A3C, 로그가 표시됩니다 2147330620그리고 같은 주소인지 알아야 합니다. 하나를 붙여넣고,다른 하나를 읽어보세요.
파일 권한. 개종시키다 755 8진수에서 2진수로 그리고 보세요 111 101 101는 모드 필드가 정의하는 순서의 9 개의 권한 비트와 정확히 일치합니다. 이것이 누군가에게 이유를 설명하는 가장 빠른 방법입니다 chmod 644 그리고 chmod 664 그룹 쓰기 비트 하나만큼 다릅니다.
색상 값. #FF5733 는 3 바이트: 빨강 255,녹색 87,파랑 51. 그것의 십진수 성분으로 16 진수 색깔을 분할하는 것은 2 개의 16 진수 자리 시간 변환입니다. 가득 차있는 워크플로를 위해 - 팔레트,대조, 체재 변환 - the 컬러 피커 끝에서 끝까지 처리하지만 기본 산술은 정확히 이것입니다.
비트 마스크와 플래그. 의 플래그 필드입니다 0b00101100 이다 0x2C 그리고 소수점 44. 어떤 플래그가 설정되어 있는지 확인할 때 이진수는 읽을 수 있는 유일한 형식입니다; 상수를 코드에 쓸 때 hex는 입니다. 둘 다 필요하죠, 끊임없이.
네트워크 및 프로토콜 작업. 서브넷 마스크,MAC 주소,IPv6 그룹,프로토콜 번호,체크섬은 모두 스펙에서는 16 진수 또는 2 진수이고 툴링의 절반에서는 10 진수입니다. 특히 IP 주소 옥텟은 점 표기법에서는 10 진수이고 마스크를 터치하는 순간에는 2 진수입니다.
해시 및 식별자. A SHA-256 출력은 64 16 진수 문자 - 256 비트, 32 바이트입니다. 십진수로 변환하면 78 자리 숫자가 생성되며, 모든 순진한 변환기가 정확히 여기서 끊어집니다. 왜냐하면 안전한 정수 천장보다 대략 10^25 배 크기 때문입니다. 변환하는 대신 해시를 생성하는 경우 해시 생성기 클라이언트 측에서 생산합니다.
인터뷰 및 교과 과정 문제. 기본 변환은 CS 기본 요소의 필수 요소이며, 비트 수와 함께 네 가지 공통 기본 모두의 값을 동시에 표시하는 참조 구현을 통해 자신의 작업을 빠르게 확인할 수 있습니다.
한눈에 보는 기본 비교
| 베이스 | 명명하다 | 숫자 | 숫자당 비트 수입니다 | 당신이 보는 곳 |
|---|---|---|---|---|
| 2 X 2000 X 2000 X 2000 X 2000 X 2000 X 2000 X 2000 X 2000 X 2000 X 2000 X 2000 X 200 | 이진 | 0-1 | 1 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 100 X 100 X | 비트 마스크, 플래그, 하드웨어 레지스터 |
| 8 X 1000 X 1000 X 1000 X 1000 X 1000 X 100 X 80 X 100 X 80 X 80 X 80 X 80 X 80 X 80 X 8 | 팔진수 | 0-7 | 3 X 1000 X 1000 X 1000 X 100 X 100 X 100 X 30 X 30 X 30 X 30 X 30 X 30 X 30 X 30 X 30 X | Unix 파일 권한, 레거시 C 리터럴 |
| 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 X 10 | 소수점 | 0-9 | ~3.32 | 인간이 쓰는 모든 것 |
| 16 | 16진수 | 0-9, AF | 4 X 1000 X 1000 X 1000 X 400 X 40 X 40 X 40 X 40 X 40 X 40 X 40 X 40 X 40 X 40 X 40 X 40 | 메모리 주소, 색상, 해시, 바이트 |
| 32 | 베이스 32 | 0-9, AV | 5 X 1000 X 1000 X 1000 X 100 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 | 컴팩트한 대소문자 구분 인코딩 |
| 36 | 베이스 36 | 0-9, AZ | ~5.17 | 짧은 ID, 송장 코드, URL 안전 번호 |
The "bits per digit" column 은 전체 테이블을 설명합니다. 2 의 거듭제곱 (2,8, 16,32) 인 기저들은 자리당 비트들의 정수수를 가지고 있는데,이는 경계를 가로지르는 캐리 없이 자리들이 비트 그룹들에 맵핑되는 것을 의미합니다 - 이것이 바로 hex-to-binary 를 계산이 아닌 룩업으로 만드는 것입니다. 2 의 거듭제곱 (10,36) 이 아닌 기저들은 자리당 분수 비트들을 가지고 있는데,이는 십진수를 이진수로 변환하는 것이 진정으로 산술을 필요로 하고 대입에 의해 수행될 수 없는 이유입니다.
그리고 동일한 입력 문자열은 완전히 다른 값을 갖는 여러 기반의 법적 숫자가 될 수 있습니다. 101 명심해야 할 좋은 것입니다:
| 로 읽는다 | 값 |
|---|---|
| 이진 | 5 X 1000 X 1000 X 1000 X 100 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 X 50 |
| 팔진수 | 65 |
| 소수점 | 101 |
| 16진수 | 257 |
| 베이스 36 | 1,297 |
다섯 개의 숫자,하나의 문자열. 베이스는 디스플레이 선호도가 아닙니다 - 데이터의 일부이며,이 글의 모든 버그는 그것을 적는 것을 잊은 곳에서 왔습니다.
어떤 브라우저 기반 유틸리티가 도달 범위 내에서 유지할 가치가 있는지 더 자세히 살펴보기 위해 매일 사용하는 유틸리티를 수집했습니다 웹 개발자's 툴킷.
자주 묻는 질문
10진수를 이진으로 변환하려면 어떻게 해야 합니까?
숫자를 2 로 반복해서 나누고 마지막에서 첫 번째까지 나머지 부분을 읽습니다. 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. 나머지 상향식을 읽으면 101010 이 나옵니다. 변환기는 BigInt 산술에서 이를 실행하므로 포켓 계산기가 보유할 수 있는 모든 값을 훨씬 넘어서는 값에 대해 정확하게 유지됩니다.
16진수를 10진수로 어떻게 변환합니까?
각 16 진수에 위치의 거듭제곱으로 올린 16 을 곱하고 오른쪽의 0 부터 세어본 다음 곱을 더합니다. FF 는 (15 × 16) + 15 = 255 입니다. 1A3 은 (1 × 256) + (10 × 16) + 3 = 419 입니다. 소스 베이스를 16 으로 설정하고 0x 접두사가 있거나 없는 값을 붙여넣으면 십진수가 즉시 나타납니다.
바이너리를 16진수로 어떻게 변환합니까?
이진수를 오른쪽부터 시작하여 4 개의 니블로 묶고,각 니블을 하나의 16 진수로 매핑합니다. 11111111 은 F 와 F 인 1111 과 1111 로 분할되므로 답은 FF 입니다. 그룹화는 16 이 2 의 4 제곱이므로 1 개의 16 진수는 정확히 4 비트를 인코딩하고 캐리는 그룹 경계를 넘지 않기 때문에 작동합니다. 바이트에 16 진수가 사용되는 이유입니다: 1 바이트는 항상 정확히 2 개의 16 진수 자리입니다.
프로그래머는 왜 십진수 대신 십육진수를 사용하는가?
hex 는 이진수와 십진수에 깨끗하게 매핑하지 않기 때문에. 하나의 hex 숫자는 정확히 4 비트이고 1 바이트는 정확히 2 개의 16 진수 자리이므로 0xFF 는 눈에 띄게 전체 바이트이고 0xDEADBEEF 는 눈에 띄게 4 바이트입니다. 십진수는 그러한 구조를 제공하지 않습니다: 255 에 관한 어떤 것도 바이트를 채우지 못한다고 발표하지 않습니다. Hex 는 원시 이진수의 길이의 4 분의 1 이면서 비트 레이아웃을 읽을 수있게 유지합니다.
이 변환기가 매우 큰 수를 처리할 수 있습니까?
예. 모든 값은 BigInt 로 자리수 단위로 파싱되므로 2^53 천장도 없고 어떤 크기로도 부동 소수점 반올림이 없습니다. 256 비트 해시,전체 RSA 모듈러스 또는 500 자리 십진수가 정확하게 변환됩니다. parseInt 또는 Number 에 구축된 변환기는 오류가 가장 발견하기 어려운 범위인 9,007,199,254,740,991 이상의 값을 자동으로 손상시킵니다.
음수와 two's 보수를 지원합니까?
음수 값은 부호-크기 표기법인 선행 마이너스 부호로 지원되고 렌더링됩니다. Two's 보수는 숫자가 아닌 고정 너비 레지스터의 속성이기 때문에 의도적으로 적용되지 않습니다: −1 은 8 비트의 FF,16 비트의 FFFF,32 비트의 FFFFFFFF 입니다. two's 보수 패턴을 생성하려면 선택한 너비의 거듭제곱에 2 를 음수 값으로 추가하고 결과를 변환합니다. 8 비트의 −42 에 대해 256 − 42 = 214,이는 16 진수의 D6 입니다.
36 진법은 어떤 용도로 사용되나요?
Base 36 은 자리수 0-9 를 사용하고 그 뒤에 AZ 문자를 사용하여 대소문자를 구분하지 않는 ASCII 영숫자에서 구축할 수 있는 가장 조밀한 숫자 표기법이 됩니다. 짧고 URL 안전하며 대소문자를 구분하지 않는 문자열을 생성하므로 짧은 링크 ID,송장 코드,쿠폰 코드 및 컴팩트 타임스탬프에 표시됩니다. 64 비트 값은 십진수 20 자리 또는 육진수 16 자리 대신 13 base-36 문자를 사용합니다.
비트 길이와 바이트 길이는 무엇을 의미합니까?
비트 길이는 선행 0 을 무시한 value's 크기의 유효 비트 수입니다: 255 는 비트 길이가 8 이고 256 은 비트 길이가 9 입니다. 바이트 길이는 8 의 다음 배수로 반올림된 그 숫자와 함께 값이 맞는 가장 작은 정수 유형을 알려주며,이는 일반적으로 누군가가 처음에 숫자를 이진수로 변환하는 실제 이유입니다.
번호를 변환할 때 데이터가 서버로 전송됩니까?
아니요. 모든 변환은 브라우저의 JavaScript 에서 계산되므로 네트워크 왕복 후가 아닌 각 키 입력에 대한 결과가 업데이트됩니다. 입력한 내용이 전송,로그 또는 저장되지 않으며 페이지가 로드된 후에도 변환기는 네트워크 연결 없이 계속 작동합니다.



