N의 보수 = 두 수의 합이 N이 되게 하는 수
컴퓨터의 음의 정수를 표현하기 위해서 고안 되었다.
컴퓨터는 덧셈밖에 하지 못하기 때문에 A - B → A + (-B) 로 바꾸어 계산이 이루어짐
예) 7의 10의 보수 → 3
2의 10의 보수 → 8
각 자릿 수의 값이 모두 1인 수에서 주어진 2진수를 빼면 1의 보수를 얻음.
쉽게 얘기해서 이진 수의 0 → 1, 1 → 0 으로 바꾸면 된다.
예) 최대 비트 수가 8일 때 7의 1의 보수를 구하라.
7 = 0000 0111
→ 1111 1000
위에서 구한 1의 보수에 1을 더한 값이 2의 보수가 된다.
7의 1의 보수인
1111 1000
+0000 0001
→ **1111 1001**
2의 보수와 원래의 수를 더했을 때 값이 최대 비트 수를 넘어선 값을 제외하고
0이 되었다면 올바르게 구한 것이다.
0000 0111
+1111 1001
→1 0000 0000
앞서 설명된 방법으로 2의 보수를 구한 후 더한 뒤 덧셈한 결과가 최상위 비트에서 자리 올림이 생겼다면 최상위 비트를 제외한 후 값이 결과가 된다.
예) 10 - 6 = 4
1010(2) - 0110(2)
→1010(2) + 1010(2) = 1 0100(2)
자리 올림이 생겨 최상위 비트 1을 제외한 0100(2) (=4) 이기 때문에 뺄셈이 올바르게 된 것을 확인할 수 있다.
https://velog.io/@octo__/2%EC%9D%98-%EB%B3%B4%EC%88%98%EB%B2%95-twos-complement