○ 개념
보수는 뺄셈을 덧셈으로 계산할 때 사용합니다.
예를 들어보자면,
80 - 48이라는 식이 있다고 했을 때, 48의 10의 보수는 52.
80 + 52 = 132이고요, 여기서 삐져나온 자릿수 100을 빼면 32가 됩니다.
어떤가요? 뺄셈을 덧셈해도 뺄셈 계산이 되지요?
컴퓨터 CPU에서는 이러한 방식으로 뺄셈을 2의 보수를 취해서 덧셈으로 계산합니다.
○ 공식
진법은 2진법, 8진법, 10진법, 16진법 등이 있지요?
모든 진법에는 2가지의 보수가 존재하는데, 만약 R진법이라면 R의 보수와 R-1의 보수가 존재합니다.
즉 10진법에는 10의 보수와 9의 보수가 존재하고, 2진법에는 2의 보수와 1의 보수가 존재하겠지요.
이러한 보수를 구하는 공식은 다음과 같습니다.
R진법 N자릿수 X의 R의 보수: R의 N승 - X
R진법 N자릿수 X의 R-1의 보수: R의 N승 - 1 - X
즉, 10진수 567의 9의 보수는, 10의 3승 - 1 - 567 = 999 - 567 = 432가 됩니다.
10의 보수는 공식에 의하면, 이전 보수(9의 보수)에서 +1을 취하면 되겠지요, 즉 433이 됩니다.
(이처럼 R-1의 보수를 구했다면, R의 보수는 R-1의 보수에서 +1만 하면 되니 참 쉽지요?)
그냥 간단하게 생각하시면 됩니다.
10진수 567의 9의 보수는, 567을 999로 만드는 숫자입니다.
마찬가지로, 8진수 742의 7의 보수는, 742를 777로 만드는 숫자입니다.
○ 1의 보수
2진법의 1의 보수는 조금 특별합니다.
그냥 비트 전체를 반전시키면 1의 보수가 됩니다.
EX) 2진수 00110010의 1의 보수는 -> 11001101
○ 2의 보수
2의 보수는 1의 보수에서 +1을 하면 되지만, 더 쉽게 구할 수도 있습니다.
그냥 비트의 최하위 비트(LSB, 가장 오른쪽 비트)에서부터 1을 만날 때까지 그대로 쓰고, 1 뒤에부터는 반전하여 쓰면 됩니다.
EX) 2진수 11010010의 2의 보수는 0 -> 10 -> 1을 만났으니까 나머진 역으로, 00101110