2의 보수 계산기란?
2의 보수 계산기는 10진수, 2진수, 16진수 사이를 변환하면서 컴퓨터 내부에서 음수가 어떻게 표현되는지 보여 주는 도구입니다. 2의 보수(two's complement)는 사실상 모든 현대 프로세서가 부호 있는 정수를 저장할 때 사용하는 표준 방식입니다. 그래서 이 개념은 프로그래머, 전자공학 전공생, 그리고 디지털 논리를 다루는 모든 사람에게 꼭 필요합니다. 이 계산기에 원하는 진법으로 숫자를 입력하고 비트 폭(8·16·32비트)을 고르면, 2의 보수 표현과 함께 그에 해당하는 10진수 값을 바로 확인할 수 있습니다.
계산기 사용 방법
- 입력란에 숫자를 적습니다 — 10진수, 2진수, 16진수를 모두 받습니다.
- 필요하면 입력값의 진법을 선택합니다.
- 비트 폭을 고릅니다: 8비트, 16비트, 32비트.
- 결과를 확인합니다 — 2진수, 16진수, 그리고 부호 있는 10진수 값이 자동으로 표시됩니다.
비트 폭이 중요한 이유는 저장 가능한 값의 범위를 결정하기 때문입니다. 예를 들어 8비트 부호 있는 정수는 -128부터 127까지, 16비트는 -32,768부터 32,767까지 표현할 수 있습니다.
공식 풀이
2진수의 2의 보수를 구하는 방법은 두 단계입니다.
$$\text{Twos Complement} = \left(\sim \text{Number}_{\,2}\right) + 1 \pmod{2^{\text{Bit Width}}}$$
- 모든 비트를 반전합니다(0은 1로, 1은 0으로 바꿉니다). 이것이 1의 보수입니다.
- 그 결과에 1을 더합니다.
가장 왼쪽 비트는 부호 비트 역할을 합니다. 0이면 양수, 1이면 음수입니다. 음의 10진수를 2의 보수로 바꿀 때는 \(2^{n} + \text{값}\) 공식을 쓰며, 여기서 \(n\)은 비트 폭입니다.
예제로 따라 하기
-5를 8비트 2의 보수로 변환해 보겠습니다.
- 먼저 +5를 2진수로 나타냅니다:
0000 0101. - 비트를 반전합니다:
1111 1010. - 1을 더합니다:
1111 1011.
따라서 -5는 1111 1011로 저장되며, 이는 16진수로 FB입니다. 확인해 보면 251(부호 없는 값)에서 256을 빼면 -5가 됩니다: $$251 - 256 = -5$$
부호 있는 정수 범위 (비트 너비별)
2의 보수(Two's complement)는 컴퓨터에서 부호 있는 정수를 나타내는 표준 방식입니다. 주어진 비트 너비 \(n\)에 대해, 한 개의 비트가 부호 비트로 작용하므로 나타낼 수 있는 부호 있는 정수의 범위는 \(-2^{n-1}\)부터 \(2^{n-1}-1\)까지이며, 동일한 비트를 부호 없는 방식으로 해석하면 \(0\)부터 \(2^{n}-1\)까지를 다룹니다. 모든 산술 연산은 \(2^{n}\) 모듈로 래핑됩니다.
| 비트 너비 \(n\) | 부호 있는 최소값 \(-2^{n-1}\) | 부호 있는 최대값 \(2^{n-1}-1\) | 부호 없는 최대값 \(2^{n}-1\) | 모듈러스 \(2^{n}\) |
|---|---|---|---|---|
| 8 | -128 | 127 | 255 | 256 |
| 16 | -32,768 | 32,767 | 65,535 | 65,536 |
| 32 | -2,147,483,648 | 2,147,483,647 | 4,294,967,295 | 4,294,967,296 |
| 64 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 | 18,446,744,073,709,551,615 | 18,446,744,073,709,551,616 |
예를 들어, 10진법 5를 8비트 형식으로 2의 보수 표현하면 부호 없는 바이트로 읽을 때 251이 되며, 이는 부호 있는 값으로 \(-5\)를 나타냅니다.
일반적인 8비트 값의 10진–2진–16진 참고표
다음 표는 대표적인 부호 있는 10진 값을 8비트 2의 보수 2진 및 16진 형식으로 매핑합니다. 음수는 최상위 비트가 1로 설정되어 있습니다. 값을 부정하려면 8개 비트를 모두 반전하고 1을 더합니다.
| 부호 있는 10진 | 8비트 2진 | 16진 | 부호 없는 값 |
|---|---|---|---|
| -128 | 1000 0000 | 0x80 | 128 |
| -64 | 1100 0000 | 0xC0 | 192 |
| -5 | 1111 1011 | 0xFB | 251 |
| -1 | 1111 1111 | 0xFF | 255 |
| 0 | 0000 0000 | 0x00 | 0 |
| 1 | 0000 0001 | 0x01 | 1 |
| 5 | 0000 0101 | 0x05 | 5 |
| 64 | 0100 0000 | 0x40 | 64 |
| 127 | 0111 1111 | 0x7F | 127 |
2진 형식을 독립적으로 확인하려면, 8비트 패턴 11111011을 10진으로 변환하면 251이 됩니다 (부호 있는 방식으로는 \(-5\)로 해석됨).
핵심 용어 및 정의
- 비트 너비
- 정수를 저장하는 데 사용되는 이진 숫자의 개수(일반적으로 8, 16, 32 또는 64). 모듈러스 \(2^{n}\)을 정하므로 나타낼 수 있는 값의 범위를 결정합니다.
- 부호 비트
- 부호 있는 수가 음수(1) 또는 음이 아닌 수(0)인지를 나타내는 단일 비트. 2의 보수에서는 가장 높은 자릿수의 비트입니다.
- 최상위 비트(MSB)
- 2진 수에서 가장 왼쪽에 위치한 최고 값의 비트. 부호 있는 2의 보수 값에서 MSB는 부호 비트로도 작용합니다.
- 1의 보수
- 수의 비트 반전 — 모든 0이 1이 되고 모든 1이 0이 됨(\(\overline{B}\)). 2의 보수를 만들기 위해 1을 더하기 전의 중간 단계입니다.
- 2의 보수
- 주요 부호 있는 정수 인코딩: 값을 부정하려면 모든 비트를 반전하고 1을 더함, 즉 \(\overline{B}+1 \pmod{2^{n}}\). 0의 표현이 유일하며 동일한 하드웨어로 부호 있는 수와 부호 없는 수를 모두 더할 수 있습니다.
- 오버플로우/래핑
- 결과가 비트 너비의 나타낼 수 있는 범위를 초과할 때 발생하는 현상; 값은 \(2^{n}\) 모듈로 래핑됩니다. 예를 들어, 8비트 최대값 127에 1을 더하면 -128로 래핑됩니다.
- 부호 있는 정수 대 부호 없는 정수
- 부호 있는 정수는 2의 보수를 사용하여 음수를 나타낼 수 있습니다(범위: \(-2^{n-1}\)부터 \(2^{n-1}-1\)); 부호 없는 정수는 모든 비트 패턴을 음이 아닌 수로 취급합니다(범위: \(0\)부터 \(2^{n}-1\)). 비트는 동일하며 — 해석만 다릅니다.
자주 묻는 질문
컴퓨터는 왜 2의 보수를 사용하나요? 덧셈과 뺄셈을 같은 회로로 처리할 수 있고, 부호-크기 방식이나 1의 보수와 달리 0의 표현이 하나뿐이기 때문입니다.
숫자가 비트 폭보다 크면 어떻게 되나요? 값이 오버플로(overflow)되어 순환하면서 예상치 못한 결과가 나옵니다. 이를 피하려면 더 넓은 비트 폭을 선택하세요.
다시 일반 10진수로 어떻게 바꾸나요? 부호 비트가 1이면 2의 보수를 한 번 더 구한 뒤 음수 부호를 붙입니다. 0이면 그대로 일반 2진수로 읽으면 됩니다.