2의 보수 계산기란?
2의 보수(two's complement)는 컴퓨터가 정해진 비트 수 안에서 부호 있는 정수를 표현하는 표준 방식입니다. 이 계산기는 10진수와 n비트 레지스터 폭을 입력받아, 해당 값이 2의 보수 비트 패턴으로 어떻게 저장되는지, 그 비트들이 부호 없는 값으로는 무엇을 나타내는지, 그리고 부호 있는 수로는 어떻게 해석되는지를 보여줍니다. 양수와 음수 입력 모두에 대해 동작합니다.
사용 방법
인코딩하려는 10진수 값과 비트 수(보통 8, 16, 32)를 입력하세요. 계산기는 모듈로 연산을 사용해 값을 n비트 레지스터에 맞춰 감싸고, 2진수 표현을 보여준 뒤 부호 있는 해석으로 디코딩합니다. 음수 입력은 자동으로 2의 보수 형태로 저장됩니다.
공식 설명
값 \(x\)를 \(n\)비트에 저장하려면, 저장되는(부호 없는) 패턴을 다음과 같이 계산합니다.
$$\text{stored} = \left(\left(x \bmod 2^{n}\right) + 2^{n}\right) \bmod 2^{n}$$저장된 값의 2의 보수(음수화)는 다음과 같습니다.
$$\text{twos} = \left(2^{n} - \text{stored}\right) \bmod 2^{n}$$\(n\)비트 패턴의 부호 있는 의미를 디코딩하려면: 패턴이 \(2^{n-1}\) 이상이면 값은 \(\text{pattern} - 2^{n}\) (음수)이고, 그렇지 않으면 패턴 자체가 값이 됩니다.
예제로 살펴보기
-5를 8비트로 인코딩해 봅시다. 여기서 \(2^{8} = 256\) 이므로 \(\text{stored} = \left(\left(-5 \bmod 256\right) + 256\right) \bmod 256 = 251\) 입니다. 2진수로 \(251 = 11111011\) 입니다. 251을 디코딩하면: \(251 \ge 2^{7}\ (128)\) 이므로 부호 있는 값은 \(251 - 256 = -5\) 가 됩니다. 251의 2의 보수는 \(\left(256 - 251\right) \bmod 256 = 5\) 로, 크기(절댓값)와 일치합니다.
자주 묻는 질문
음수는 왜 큰 2진수 패턴처럼 보이나요? 앞쪽 비트가 모두 1이기 때문입니다. \(n\)비트 부호 있는 연산에서 맨 앞 비트가 1이면 음수를 의미하므로, 11111011은 251이 아니라 -5입니다.
n비트에는 어떤 범위가 들어가나요? 부호 있는 값은 \(-2^{n-1}\)부터 \(2^{n-1} - 1\)까지입니다. 8비트라면 -128부터 127까지죠.
숫자가 너무 크면 어떻게 되나요? 레지스터 범위를 벗어난 값은 모듈로 연산에 의해 순환(오버플로)됩니다. 실제 하드웨어와 똑같은 방식입니다.