사칙연산 중 덧셈, 뺄셈을 어떻게 컴퓨터에서 2진수로 처리하는지 알아봅니다.
덧셈은 10진수와 마찬가지로 각각의 자릿수를 더해서 올림수를 올려주면 됩니다.

이 부분은 10진수처럼 자연스럽게 할 수 있는 부분이기 때문에 넘어가겠습니다.
뺄셈은 덧셈보다 약간 더 복잡해집니다.
컴퓨터에서 뺄셈을 이해하기 전에 결론만 말하자면 컴퓨터에서는 2의 보수를 취해서 더하는 방식으로 뺄셈 연산을 합니다.
덧셈을 통해 뺄셈을 한다는게 이해가 안되지만, 먼저 보수를 알아보고 보수를 통해 뺄셈을 하는 방식을 알아보면서 이해를 해봅시다.
보수(補數)는 보충을 해주는 수를 의미합니다.
이렇게 개념만 들으면 잘 모르겠으니 10진수에서 보수를 먼저 살펴보겠습니다.
일단 10진수에서 보수를 살펴봅시다.
1에 대한 10의 보수는? => 9
10 - 1 => 9
3에 대한 5의 보수는? => 2
5 - 2 => 2
2에 대한 8의 보수는? => 6
8 - 2 => 6
느낌이 오시죠?
321에 대한 1000의 보수는 몇일까요? => 679
자연스럽게 보수를 계산할 수 있을텐데 아마 사진과 같은 과정으로 보수를 계산하실 것입니다.

4번째 자리에 1을 쭉쭉 내려주는 방식입니다.
마지막 자릿수는 내려줄 곳이 없어서 10이겠죠?
이제 자릿수를 3자리로 제한해봅시다.
10진수의 3자리수에서 표현할 수 있는 최대 수인 999 - 321의 과정을 살펴봅시다.
그리고 999 + 679(321의 보수)의 과정도 같이 살펴봅시다.

678과 1678이 나왔습니다.
하지만 자리수를 3자리로 제한했기 때문에 둘은 678라는 같은 결과를 갖습니다.
자리수가 3자리로 제한됐을 때
999 + (-321) == 999 + 679(321의 보수)
-321 == 679
즉 10진수의 숫자가 3자릿수로 제한돼있을 때 -321은 679로 표현할 수 있는 것입니다.
2진수에서 2의 보수는 모든 비트를 반대로 세팅하고, +1을 시켜주면 끝입니다.
10진수와 뭔가 많이 달라진 것 같나요?
다시 10진수에서 보수를 구하는 과정을 다시 사진으로 확인해봅시다.

2진수도 10진수와 똑같습니다.
각 자리수마다 1을 놓고 빼버리고, 마지막 자리수는 2를 놓고 빼버리는 것입니다.
우리는 10진수에서 자릿수가 제한될 때 -321을 679로 표현하는 방법을 살펴봤습니다.
그 방식을 2진수에서도 사용해보겠습니다. 자릿수를 4자리로 제한하고 보수를 취해봅시다.
자릿수를 4자리로 제한됐을 때
0001 (=1)의 2의 보수 => 1111 (=-1)
0011 (=3)의 2의 보수 => 1101 (=-3)
3 + (-1)의 결과가 정상적으로 나오는지 확인해볼까요?

자릿수를 4자리로 제한했으므로 결과는 0010로 2가 됩니다.
이제는 보수와 뺄셈에 대한 감이 잡혔을 겁니다.
컴퓨터에서도 비트수(=자릿수)가 한정돼있기 때문에 뺄셈은 이렇게 2의 보수를 취한 후 덧셈 연산으로 실행됩니다.
이로 인해 덧셈만으로 뺄셈을 구현할 수 있기 때문에 추가적인 뺄셈을 위한 하드웨어 필요하지 않아서, 굉장히 단순해집니다.
보수기
컴퓨터의 CPU에는 2의 보수를 취해주는 보수기가 존재하여 뺄셈을 할 때 활용됩니다.
하지만 앞서 본 방식을 적용하다보면 문제가 생깁니다.
컴퓨터에서 4비트만으로 데이터를 다룬다고 생각해봅시다.
4비트는 0에서 15까지의 수를 표현할 수 있습니다.
그럼 15와 8을 2의 보수를 취해서 -15와 -8로 바꿔볼까요?
1111 (15)의 2의 보수=> 0001(-15)
1000 (8)의 2의 보수 => 1000(-8)
-15는 0001이 됐습니다. -8은 8과 똑같은 1000이 됐습니다.
뭔가 이상합니다.
컴퓨터는 음수를 표현하는 방법은 2의 보수를 취하는 것 말고도 여러가지가 방법들이 있습니다.(해당 글에서는 2의 보수만을 다룹니다.)
하지만 이 모든 방법들에서 공통적인 것은 2진수의 맨 좌측 비트가 부호 비트로 사용된다는 점입니다.
즉 4비트만으로 데이터를 다룬다면 왼쪽 첫 비트는 부호비트가 되는 것입니다.
이렇게 부호 비트를 사용하게 되면 앞서 언급한 문제는 발생하지 않습니다.

사진 출처 - ktword 정보통신기술용어해설
해당 글에서는 2의 보수만을 다뤘으므로 사진에 2의 보수 부분과 10진수 부분만 확인해주시면 되겠습니다.
2의 보수를 취할 경우 4비트는 -8 ~ 7의 수를 표현할 수 있습니다.
n비트일 경우 -2^n ~ 2^n -1의 수를 표현할 수 있습니다.
여기서 양수 범위에서 -1을 한 이유는 0을 0000으로 표현하기 때문입니다.
책 - 컴퓨터구조론 및 대학 강의