본문 바로가기

CS/컴퓨터구조

이진수로 음수 표현하기 (2의 보수)

-5를 이진수로 표현하려면 어떻게 해야할까?

 

여러 방법이 있지만 그 중에 가장 잘 알려진 방법이 바로 2의 보수(two's complement)를 구해서 해당 값을 음수로 간주하는 것이다. 

 

2의 보수의 사전적 의미는 "어떤 수를 그보다 큰 2^n에서 뺀 값"이다. 

 

예를 들어, 101의 보수는 101보다 큰 2^4 = 1000에서 101을 뺀 011이다.

 

(급하다면 아래 부분을 건너뛰고 넘고 마지막 부분을 확인!)


 

아래 공식을 참고해서 빼기를 진행하면 된다.

- 1에서 0을 빼면 1

- 1에서 1을 빼면 0

- 0에서 0을 빼면 0

- 0에서 1을 빼려면 왼쪽에서 가장 가까운 1을 빌린다. 빌려준 값은 0이 되고 빌린 값은 2가 되어, 거기서 1을 빼 1이 남는다.

 

그럼 빼기를 진행해보자

1) 101보다 큰 2^4인 1000에서 101을 뺀다.

가장 오른쪽 자리에는 1을 뺄 값이 없기 때문에 왼쪽에서 가장 가까운 1을 빌려온다.

 

 

 

2) 가장 가까운 1이 4번째 왼쪽 자리에 있기 때문에 오른쪽으로 빌려준다. 

그럼 4번째 자리는 0이 되고 3번째 자리는 2가 된다.

3번째 자리도 오른쪽으로 값을 빌려줘야 하기 때문에 1이 되고 2번째 자리는 2가 된다. 

마지막으로 2번째 자리도 1을 오른쪽에 빌려줘야 하기 때문에 1을 빼 1이 남고 오른쪽은 2가 된다.

그럼 준비는 끝이다.

 

 

3) 이제 맨 오른쪽 값은 2이고 여기서 1을 빼면 1이 남는다. 

 

 

 

 

 

 

4) 나머지도 빼기를 진행하면 011이 나온다. 

 

 

 

 

 

 

그럼 이진법으로 양수 5인 101의 음수는 011이다. 

 


하지만 이 방법보다 더 간단하게 2의 보수를 구하는 방법이 있다. 

바로, 0과 1을 뒤바꾼 뒤 1을 더하는 것이다. 

 

같은 101을 이번에 새 방법으로 구해보자. 

 

1) 1과 0을 서로 바꾸자. 

2) 마지막으로 1을 더한다.

 

아까와 같은 011을 얻는 것을 확인할 수 있다. 

 


참고

그럼 8 (1000)의 음수를 이진수로 구하면 어떻게 될까?

 

1) 1과 0을 서로 바꾸고

2) 마지막으로 1을 더한다.

앗..!

양수로 표현한 8인 1000는 음수로도 같은 1000이 나온다. 

 

이렇듯, 0이나 2^n 형태의 이진수는 양수 음수 모두 같은 값을 가진다. 

따라서 n 비트로는 -2^n과 2^n이라는 수를 동시에 표현하지 못하고

이 이유 때문에 음수를 구하기 위해 2의 보수를 취하는 방식은 완벽한 방법이 아니라고 한다.