이 도구에 대하여
2의 보수 변환기는 부호 있는 정수를 선택한 비트 폭(4, 8, 16, 32, 64비트)에서 2의 보수 이진 및 16진 표현으로 인코딩하고, 이진이나 16진 패턴을 그것이 나타내는 부호 있는 값으로 디코딩합니다. 전반적으로 BigInt를 사용하므로 64비트 값도 정밀도 손실 없이 정확히 처리됩니다.
N비트 폭의 경우 부호 있는 범위는 −2^(N−1)부터 2^(N−1)−1까지입니다. 십진수 d를 인코딩하려면: d가 음수가 아니면 패턴은 단순히 d이고, d가 음수이면 패턴은 2^N + d입니다(동등하게 |d|의 모든 비트를 반전하고 1을 더함). 도구는 N비트 0 채움 이진, N/4자리 16진, 1의 보수(비트 NOT), 같은 비트의 부호 없는 해석을 출력하고, 값이 선택한 폭에 맞지 않으면 오버플로 오류를 표시합니다.
디코딩하려면 이진이나 16진 패턴을 붙여넣으면 도구가 최상위 비트를 읽습니다: 최상위 비트가 설정되어 있으면 값은 패턴 − 2^N(음수)이고, 아니면 패턴 자체입니다. 항상 부호 있는 해석과 부호 없는 해석을 나란히 보여주며, 이는 2의 보수가 하드웨어 수준에서 해결하는 바로 그 모호성입니다. 모든 계산은 브라우저에서 로컬로 이루어집니다.
자주 묻는 질문
각 비트 폭의 범위는 무엇인가요?
N비트 폭은 부호 있는 값을 −2^(N−1)부터 2^(N−1)−1까지 나타냅니다. 따라서 8비트는 −128부터 127, 16비트는 −32768부터 32767, 32비트는 약 ±21억을 아우릅니다. 범위를 벗어난 값은 오버플로 경고를 유발합니다.
음수는 어떻게 인코딩되나요?
크기를 취해 모든 비트를 반전(1의 보수)한 다음 1을 더합니다. 동등하게 패턴은 2^N에 음수를 더한 값입니다. 예를 들어 8비트에서 −1은 11111111이고, −42는 11010110입니다.
부호 없는 값도 표시하는 이유는 무엇인가요?
같은 비트 패턴은 두 가지 해석을 갖습니다: 부호 있는(2의 보수)과 부호 없는. 둘 다 보여주면, 예를 들어 8비트 패턴 11111111이 부호 있으면 −1이지만 부호 없으면 255임이 분명해집니다 — 해석은 하드웨어가 그것을 어떻게 다루느냐에 달려 있습니다.
64비트 값을 정확히 처리할 수 있나요?
네. 변환기는 임의 정밀도 BigInt 산술을 사용하므로, 64비트 패턴과 그 부호 있는 값이 일반 JavaScript 숫자가 2^53을 넘어 도입하는 반올림 없이 정확히 계산됩니다.