본문 바로가기
하드웨어/컴퓨터 구조

보수(Complement)에 대해서 알아보자

by bantomak 2023. 10. 6.
반응형

부호 있는 수를 표현하는 방법

컴퓨터에서는 숫자를 표현할 때 양수와 음수를 어떻게 표현할까?

 

컴퓨터는 0과 1만 표현할 수 있기 때문에 부호 또한 0과 1로 표현한다.

 

즉, 부호를 나타내는 비트를 지정하여, 이 비트가 0이냐 1이냐에 따라서, 부호를 지정한다.

 

부호를 나타내는 비트는 2진수로 이루어진 여러 비트 중 가장 맨 앞의 비트이며, 이것을 부호비트(Most Significant Bit : MSB)라고 지칭한다.

 

위의 말이 사실이라면 8비트 머신에서 -5를 표현한다면 아래와 같이 표현하게 되는 것이다.

 

그럼 이 값이 정말 -5인지 확인해 보기 위해서 2진수로 표현한 5(00000101(2))와 더해보자.

만약 진짜 위의 수가 -5라면, 5와 더했을 시 0이 되어야 할 것이다.

 

그러나 계산결과는 0이 나오지 않는다.

 

정리하자면

 

맨 앞의 비트가 부호비트는 맞으나, 맨 앞 비트만 1로 바꾼다고 해서 음수가 되는 것은 아니다.

 

그렇다면 결국 컴퓨터는 음수를 어떻게 표현하는가?

이때 등장하는 것이 2의 보수이다.

 

보수(Complement)의 수학적 의미

보수는 말 그대로 보충해주는 수를 의미한다.
> 어떤 특정한 10진수 N이 있을 때 3에 대한 N의 보수를 구하라고 한다면, 3과 어떤 특정한 수를 합하여 N이 되는 수를 의미한다. 즉, 3에 대한 N의 보수는 N-3이 될 것이다.

 

좀 더 자세히 들여다보면,

K진법의 수 N이 있을 때 N을 K의 최소 제곱수가 되도록 만드는 수를 K의 보수라고 한다.

 

10진법의 수 12가 있을 때 12를 10의 최소 제곱수(이 경우 100)로 만드는 수는 88이므로 (12 + 88 = 100)

10진법 12의 10의 보수는 88이다.

 

정리하자면, K진법의 어떤 수 N이 있을 때, N의 자릿수를 하나 더 증가시키기 위해서 필요한 최소의 값을 보수라고 한다.

 

2진수에서의 2의 보수란?

2진수 N이 있다고 할때, 2진수에서의 2의 보수는 말 그대로 N을 보충하는 수이다.

 

보충한다는 의미는 위에서 보았던 수학적 의미와 유사하다.

 

예시를 들어보자
다음과 같은 2진수가 있다고 해보자 : 1101(2)
이것과 0011(2)를 더하게 되면 아래와 같을 것이다.
1101(2) + 0011(2) = 10000(2)

 

기존 값보다 한자리 높은 수(중에서 가장 작은 수)가 결과로 나왔다.

따라서 0011(2)는 1101(2)의 보수라고 볼 수 있다.(보수의 수학적 의미에 근거하여)

 

위와 같이, 어떤 수와 그 수의 보수를 더하게 되면 하나의 특징이 보이는데,

가장 왼쪽에 한 비트가 1인 상태로 붙고, 나머지는 0이 되는 형태의 2진수가 되는 것이다.

 

여기서 컴퓨터적인 성질이 적용된다.

우리가 수식으로 풀었을 때에는 10000(2)이 나오지만,

이것을 자세히 보며 4비트와 4비트를 더했더니, 5비트가 나온 것으로 볼 수도 있다.

1비트가 초과된 것이다.

 

이러한 초과비트는 머신에서 truncate하여 떼어내게 된다. 그러면

10000(2)이 1 + 0000으로 쪼개지고 1이 버려지게 되어, 0000(2)만 남게 된다.

 

최종적으로 결과값은 0이 된다.

 

양수 X + X의 2의 보수값 = 0이므로
결과적으로 X에 2의 보수를 취하게 되면 그 결과는 음수가 되는 것을 알 수 있다.

 

2의 보수를 구하는 법

  1. 1의 보수 구하기
    어떤 수의 2의 보수를 구하기 위해서는 먼저 1의 보수를 구해야 한다. 1의 보수는 단순하게 어떤 2진수가 있을 때, 이것을 반전시키면 바로 구할 수 있다. (0은 1로, 1은 0으로)
  2. 가장 낮은 자리에 1 더하기
    1의 보수를 구하였다면 8bit 머신 기준 본래값 + 1의 보수 = 11111111(2)이 될 것이다.
    이제 여기에 가장 낮은 자리에 1만 더해주면 100000000(2)이 될 것이다.
    이떄, 8bit 머신이므로, 9bit는 처리하지 못해서 가장 왼쪽 bit는 떼어내서 결과를 낸다. 그 결과 00000000(2)이 결과가 된다.
  3. 2의 보수가 맞는지 확인
    이렇게 구한 2의 보수를 본래값과 더하여, 제대로 0이 나오는지를 확인하면, 2의 보수 구하기가 마무리된다.

 

예시

10(2)을 1의 보수로 구하면 01(2)

01(2)에 1을 더해준다. 결과값 10(2)

기존 10(2)과 더하면 100(2)이 된다. 최초 자릿수가 2까지였으므로 맨 왼쪽 1이 제거된다. 00(2)으로 보수임을 확인

 

함께 읽으면 좋은 글

 

컴퓨터의 음수 표현과 보수법

컴퓨터는 어떻게 음수를 나타낼까? 얻어갈 지식 보수법 MSB ( most significant bit ) "보수법" 우선 컴퓨터가 음수를 표현하는 방법을 알아보기 전에 보수법에 대해 알아보자. 보수란 보충해주는 수라

hs-archive.tistory.com

 

C# 비트 연산자

비트 연산자(Bitwise Operator) 키워드 논리 방식 논리 게이트 & 비트 논리곱 AND | 비트 논리합 OR ^ 비트 상호배제 XOR ~ 비트 부정 NOT 비트 오른쪽 이동 - & 연산자 (논리 AND 연산자) public class Program { publi

jettstream.tistory.com

 

출처

 

컴퓨터에서의 수 표현법(feat. 2의 보수란?)

사람은 다른 사람과 대화하기 위하여 언어를 사용하고 그 언어를 이해함으로써 의사소통을 할 수 있다. 그렇다면 컴퓨터는 우리가 프로그래밍 언어로 작성한 데이터를 내부에서 어떻게 이해하

velog.io

댓글