본문 바로가기
Computer Science

[Programming] 2의 보수 계산하는 방법, Two's Complement

by Henry Cho 2021. 6. 11.
728x90

2의 보수 계산하는 방법, Two's Complement


# 보수(Complements)를 사용하는 이유?

Two's Complement는  한국에서 "2의 보수라고도 부른다. 여기서 말하는 보수는 반대로 세어가는 수라는 의미로 Computer Science에서 사용되는 단어이다. Two's Complement에서 Complement라는 단어는 보완하다 또는 덧붙이다 등과 같은 의미로 사용되는 단어이다. 단어의 의미에서 유추해 볼 수 있듯이 보수 즉 Complement는 이진법 계산에서 양수와 반대되는 값인 음수 값을 의미한다.

프로그래밍에서 보수와 같은 계산 방식이 필요한 이유는 연산 시스템의 이유가 있다. 컴퓨터는 우리가 쉽게 계산하듯이 덧셈, 뺄셈을 할 수가 없다. 덧셈을 기반으로 뺄셈이 이루어지기 때문에 컴퓨터에게 사용자가 뺄셈 명령을 내리면 컴퓨터는 덧셈 형식으로 뺄셈을 변환하여 계산이 이루어진다. 한마디로 숫자를 뺀다는 방식이 아닌 숫자를 더하는 형태로 바꾸어줘야 하기 때문에 원래 숫자에서 뺄셈으로 빠지는 숫자를 양수가 아닌 음수 형태로 바꾸어주는데 이것이 바로 보수를 의미한다. 예를 들어 아래와 같이 이해할 수 있다.

Decimal Calculation
X - Y = Z

Two's Complement
X + (-Y) = Z

# Two's Complement란?

기계어는 2진법의 010101과 같은 형태를 띠고 있다. 사용자에 의해 컴퓨터가 숫자 계산을 할 때도 컴퓨터는 기계어를 통해 위와 같은 보수 방식을 활용하여 숫자 계산이 이루어진다. Two's Complement은 이진법으로 구성된 숫자에서 뺄셈이 어떻게 이루어지는지를 보여준다. 한마디로 이진법으로 구성된 숫자들이 컴퓨터 내부에서 계산되는 방식을 Two's Complement라고 부른다. 덧셈의 경우는 이진법 덧셈 과정과 동일하다. 예를 들어 아래와 같이 덧셈의 경우 양수와 양수의 덧셈이 이루어지기에 일반적인 방식 계산 방식과 동일하다.

아래의 예제는 8비트 기준에서 변환하였다.

Two's Complement
decimal -> two's complement binary integer

10 -> 00001010
100 -> 01100100

10 + 100 = 110
00001010 + 01100100 = 01101110

 

반면에 뺄셈이 들어갈 경우 Two's Complement 방식을 사용해서 뺄셈을 덧셈 형태로 만들어준다. 덧셈 형태로 만들어주기 위해서는 X + (-Y)와 같은 형태로 만들어줘야 하는데, Y에서 보듯이 양수를 음수 형태로 바꾸어서 표현해야 한다. 이진법의 숫자를 음수 형태로 변환하는 방법은 원래 이진법 값의 반대로 표기한 다음에 1을 더해주면 된다.

아래 예제를 참고하면 이해하기가 쉽다.

#음수 형태로 변환하기 위해서는 기존 양수 이진법에서 반대로 표기 후 1을 더해준다.
#양수의 형태를 반대로 표기한 것이 음수이기 때문에 보수(Complements)라고 부른다.

#Examples
10 -> 00001010
-10 -> 11110110

110 -> 01101110
-110 -> 10010010

위의 예제와 같이 뺄셈의 경우 덧셈 형태로 나타내기 위해서 양수의 이진법 값에서 반대로 표기 후 1을 더해주면 음수의 이진법 값으로 변환된다. Two's Complement는 기존 이진법 계산 방식이 아니다 보니 어렵다고 느껴질 뿐이지 방법만 이해하면 어렵지 않다. Two's Complement를 이해하기 위해서는 직접 해보다 보면 이해가 쉽다. 필자가 참고 사항으로 넣어둔 링크에 들어가면 Two's Complement Converter 사이트가 있다. 해당 사이트에서 연습을 직접 해본다면 이해하는데 도움이 될 것이다.


https://www.exploringbinary.com/twos-complement-converter/

 

Decimal/Two’s Complement Converter - Exploring Binary

An arbitrary-precision, decimal to two’s complement and two’s complement to decimal converter

www.exploringbinary.com

 

728x90

댓글