본문 바로가기
C언어/자료형 (숫자,논리,문자)

[C언어] 2의 보수법 아주 쉽게 이해하기 (정수의 표현방식)

by bigpicture 2022. 7. 8.
반응형

컴퓨터가 정수를 표현하는 방식을 알아봅시다. 먼저 우리가 정수표현방식을 직접 정해보고 어떤 문제가 발생할 수 있는지 경험해봅시다. 

단순화하기 위해 4비트를 가지고 정수를 표현한다고 가정합시다. 정수는 양수와 음수가 있으므로 첫번째 칸을 부호로 설정해야겠다고 생각하는 것이 자연스럽습니다. 

 


0을 양수, 1을 음수라고 합시다. 3과 -3을 표현하면 아래와 같습니다. 

 

둘을 더해봅시다. 

 

 

우리가 원하는 결과가 아닙니다. 위와 같은 표현방식을 사용할 경우 덧셈 뺄셈이 자연스럽지 않습니다. 

 

 

2의 보수법의 등장

위 문제를 해결하기 위해 등장한 방법이 2의 보수법입니다. -3을 2의 보수법으로 표현하면 아래와 같습니다. 

 

 

위 그림을 보고 1의 보수가 무엇인지 알겠다고 생각하실 수 있지만 아닙니다. 1의 보수는 더 복잡한 개념을 갖고 있습니다. 뒤에서 다루겠습니다. 1의 보수를 취하고 1을 더하는 것은 결과적으로 2의 보수가 구해지는 것이므로, 2의 보수법이라고 부릅니다. 왜 그런지는 뒤에서 설명합니다. 지금은 잘 작동하는지만 알아봅시다. 2의 보수법으로 나온 -3과 3을 더해봅시다. 

 

 

원하는 결과가 나옵니다. 

 

 

1의 보수를 취하고 1을 더하면 왜 2의 보수인가?

위 문제를 해결하기 위해 10진법부터 시작해봅시다. 10진법에서 어떤 수 A의 10의 보수는 A와 더해서 $10^{n}$ 이 되는 수입니다. $10^{n}$은 A보다 큰 $10^{n}$ 중 가장 작은 $10^{n}$ 입니다. 

 

예를 들어 4의 보수는 6이고, 40의 보수는 60입니다. 550의 보수는 얼마일까요? 450 입니다. 

 

$4+6=10=10^{1}$

$40+60=100=10^{2}$

$550+450=1000=10^{3}$

 

10진법에서는 10의 보수 말고 9의 보수도 있습니다. 위 각 숫자 4,40,550의 9의 보수를 구하면 아래와 같습니다. 

 

$4+5=9$

$40+59=99$

$550+449=999$

 

10진법에서 어떤 수의 9의 보수는 더해서 $10^{n}-1$ 이 나오는 수 입니다. 

 

다른 진법에서도 같은 원리가 적용됩니다. 이진법에서 2의 보수는 얼마일까요? 더해서 $2^{n}$ 이 나오는 수입니다. 예를들어 $101_{(2)}$ 의 보수를 구해봅시다. 

 

$101_{(2)}$과 더해서 $1000_{(2)}$이 나오는 수 A가 $101_{(2)}$의 2의 보수입니다. $1000_{(2)}$은 $2^{3}$ 입니다. 

 

$101_{(2)}+A=1000_{(2)}$

 

101의 1의 보수 B는 아래와 같습니다. 합이 $1000_{(2)}$에서 1을 뺀  $111_{(2)}$과 같으면 됩니다. 

 

$101_{(2)}+B=111_{(2)}$

 

이항해서 쓰면 A와 B는 아래와 같습니다. 

 

$A=1000_{(2)}-101_{(2)}$

 

$B=111_{(2)}-101_{(2)}$

 

따라서 A가 B보다 1만큼 큽니다. 

 

$101_{(2)}$의 1의 보수 B를 먼저 구해보면 010 입니다. 2진법의 1의 보수의 특징은 1을 0으로, 0을 1로 바꾸면 된다는 것입니다. 2진법에서 1의 보수를 구하는건 굉장히 편합니다. 2의 보수를 직접 구하려면 복잡한데, 2의 보수는 1의보수에서 1을 더하여 구할 수도 있습니다. 

 

이와 같은 편리성 때문에 2의 보수를 구할 때 1의 보수를 구하고 1을 더하여 구하는 것입니다. 

반응형

댓글