보수 표현 이란?
컴퓨터는 기본적으로 0과 1, 즉 2진수로만 이해한다. 양수는 2진수로 쉽게 저장할 수 있지만, 음수는 2진수로 표현하기가 까다롭다. 이러한 문제를 해결하기 위해 보수 표현이 등장했다.
왜 보수 표현이 필요할까
컴퓨터는 덧셈은 쉽게 처리할 수 있다. 하지만 뺄셈을 설계하려면 복잡한 회로가 필요하다. 따라서 차라리 컴퓨터에 “뺄셈”도 “덧셈”으로 계산할 수 있게 한 것이 바로 보수 표현법이다. 예를 들면 A-B
는 A+(-B)
인 것이다.
보수 표현의 종류
보수 표현은 크게 2가지 방법인데, 1의 보수 혹은 2의 보수이다.
- 1의 보수: 모든 비트를 반전 (0→1, 1→0)으로 바꾸는 방법
- 2의 보수: 1의 보수를 만든 뒤, 거기에 1을 추가하는 방법
현재 모든 컴퓨터는 거의 2의 보수를 사용한다.
2의 보수
2의 보수는 다음의 순차로 진행된다.
- 양수의 2진수 표현으로 바꾼다
- 0→1, 1→0으로 반전한다. (여기 까지 1의 보수)
- 그 결과에 1을 더한다. (여기 까지 2의 보수)
수식으로 본다면 다음과 같다.
+5를 8bit로 표현하면 0000 0101
이다. 이 숫자를 -5로 만들기 위한다면
- 비트를 반전 →
1111 1010
- 1을 더함 (2의 보수) →
1111 1011
2의 보수를 쓰는 이유는 다음과 같은데,
- 0은 단 하나의
0000 0000
으로 만 표현할 수 있다. - 덧셈 회로 하나로 덧셈과 뺄셈을 모두 처리할 수 있다.
- 부호 비트 (MSB)를 통해 양수/음수를 쉽게 구분할 수 있다.
- 오버플로우 처리가 쉽다.
그렇다면 뺄셈은 어떻게 하는가
위에서 언급한 것과 마찬가지로, 컴퓨터는 뺄셈이 아닌 A+(-B)
로 한다. 예시로 알아보면 다음과 같다.
Q: 7-5
- 7 =
0000 0111
- -5 =
1111 1011
(2의 보수 법) - 더하면, =
0000 0010
(2의 보수 법칙에 의거, 올림수는 버린다) - 즉
0000 0010
은 2이므로, 7-5=2 계산식이 성립된다.
보수 표현이 중요한 이유는
컴퓨터가 내부적으로 수를 계산할 때 어떻게 동작하는지 이해할 수 있다는 장점이 있으며, 음수 범위 혹은 오버플로우 에러 등을 이해하는데 필요로 하는 선행 지식이기 때문이다. 특히 시스템 프로그래밍, 임베디드 프로그래밍 등에 많이 사용되므로, 알아두는게 좋다!