2의 보수란?
2의 보수는 컴퓨터가 고정된 비트 수를 사용하여 부호 있는 정수 — 양수 또는 음수가 될 수 있는 숫자 — 를 저장하는 표준 방식입니다. 음의 부호를 위한 별도의 기호를 따로 두는 대신, 음수를 부호에 대한 특별한 처리 없이 일반적인 이진 덧셈이 그대로 작동하도록 인코딩합니다. 거의 모든 현대 CPU가 이 방식으로 정수를 표현합니다.
이 계산기는 십진 정수와 비트 폭(8, 16 또는 32비트)을 받아서 그 2의 보수 패턴을 이진과 16진으로 모두 보여줍니다.
어떻게 작동하나요?
선택한 폭 비트에 대해, 각 값은 부호 없는 비트 패턴으로 저장됩니다:
- 숫자 이 음이 아니면, 그 패턴은 단순히 의 이진수를 앞에 0을 채워 비트로 만든 것입니다.
- 숫자 이 음수이면, 그 패턴은 의 이진수입니다.
두 번째 경우에는 이 음수이므로 은 보다 작은 양수가 되어 항상 비트에 들어맞습니다. 최상위(가장 왼쪽) 비트는 모든 음수에 대해 이 되고 음이 아닌 모든 수에 대해 이 됩니다 — 그 비트가 부호 역할을 합니다.
공식
그런 다음 결과는 정확히 개의 이진 숫자(또는 개의 16진 숫자)로 쓰입니다.
풀이 예제
예제 1: 양수
를 비트로 인코딩합니다. 이므로 패턴은 단순히 를 이진수로 나타내어 여덟 자리로 채운 것입니다:
예제 2: 음의 1
를 비트로 인코딩합니다. 이므로 를 계산합니다:
음의 1은 폭에 상관없이 항상 끊김 없는 1의 행입니다.
예제 3: 음의 5
를 비트로 인코딩합니다. 을 계산합니다:
참조 표 (8비트)
| 십진수 | 2의 보수 이진수 | 16진수 |
|---|---|---|
| 5 | 00000101 | 0x05 |
| 0 | 00000000 | 0x00 |
| -1 | 11111111 | 0xFF |
| -5 | 11111011 | 0xFB |
| 127 | 01111111 | 0x7F |
| -128 | 10000000 | 0x80 |
참고 사항
- 비트 부호 있는 정수는 부터 까지의 범위를 다루고, 비트는 부터 까지, 비트는 대략 십억을 다룹니다. 선택한 범위를 벗어난 값은 로 나눈 나머지(모듈로)로 순환합니다.
- 선행 비트는 부호입니다: 은 음이 아닌 수를, 은 음수를 나타냅니다.
- 부호 비트 없이 일반적인 음이 아닌 수를 이진수로 변환하려면 소수에서 이진수 변환기를 사용하고, 다른 진법은 일반 진법 변환기를 사용하세요.
자주 묻는 질문
2의 보수에서 -1은 무엇인가요?
어떤 폭에서든 모두 1입니다: 8비트의 경우 (0xFF), 16비트의 경우 (0xFFFF), 등등.
음수의 2의 보수를 손으로 어떻게 구하나요?
숫자의 크기를 이진수로 쓰고, 모든 비트를 뒤집은 다음, 1을 더합니다. 8비트에서 의 경우: 는 이고, 뒤집으면 이 되며, 1을 더하면 이 됩니다 — 과 같은 결과입니다.
비트 폭은 왜 중요한가요?
폭은 패턴이 차지하는 비트 수, 따라서 저장할 수 있는 숫자의 범위를 고정합니다. 같은 십진 값이라도 폭이 커질수록 선행하는 0이나 1의 문자열이 더 길어집니다.