2의 보수와 부호 있는 정수
음수 표현 방식의 진화: 부호화 절대값, 1의 보수, 2의 보수
부호 있는 정수(Signed Integer)에서는 가장 왼쪽의 최상위 비트(MSB, Most Significant Bit)를 부호 비트(0: 양수, 1: 음수)로 사용합니다.
2의 보수를 사용하는 결정적 이유와 표현 범위
1) 7 - 5 = 7 + (-5)로 변환합니다.
+7 = 00000111₂
+5 = 00000101₂ ➔ 1의 보수: 11111010₂ ➔ +1(2의 보수): 11111011₂ (-5)
2) 두 이진수를 더합니다:
00000111₂ + 11111011₂ = (1)00000010₂
8비트를 초과한 최상위 캐리 (1)을 버리면 00000010₂ = +2가 되어 뺄셈이 정확히 성립합니다.
3) 10010110₂는 MSB가 1이므로 음수입니다. 양수 절대값을 구하기 위해 다시 2의 보수를 취하면:
비트 반전(01101001₂) + 1 = 01101010₂ = 64 + 32 + 8 + 2 = 106.
따라서 10010110₂의 10진수 값은 -106입니다.
정수 오버플로우(Overflow)와 산술 시프트 주의점
>>)할 때 빈자리에 무조건 0을 채우면(논리 시프트) 음수가 양수로 바뀌는 참사가 일어납니다. 따라서 부호 있는 정수는 원래의 부호 비트(MSB, 음수면 1)를 복사해서 채우는 산술 시프트(Arithmetic Shift)를 수행합니다.핵심 요약
- ✓2의 보수는 모든 비트를 반전(1의 보수)시킨 뒤 1을 더하여 구하며, 최상위 비트(MSB)가 1이면 음수다.
- ✓2의 보수 체계는 +0과 -0의 중복 문제를 해결하여 n비트로 -2^(n-1)부터 +2^(n-1)-1까지 표현한다.
- ✓CPU는 2의 보수를 이용해 별도의 감산기 회로 없이 가산기(Adder) 하나로 덧셈과 뺄셈을 통합 처리한다.
- ✓양수+양수가 음수가 되거나 음수+음수가 양수가 되면 정수 오버플로우(Overflow)가 발생한 것이다.