[Chapter 1-a] 부호와 크기, 1의 보수, 2의 보수

cherry·2022년 2월 23일
0

비트를 사용해 수를 표현하는 방법을 알아보자.
수는 논리보다 더 복잡하지만 단어보다 훨씬 단순하다.

📚 음의 정수 표현

1. 부호와 크기

한 비트를 부호에 사용하고 나머지 비트를 수의 크기, 즉 0부터의 거리(절댓값)를 표현하기 위해 사용하는 이런 방법을 부호와 크기(sign and magnitude) 표현법이라고 말한다.

음수와 양수를 구별하기 위해 부호(sign)을 사용한다. 부호에는 양부호(+)와 음부호(-)라는 두 가지 값이 있다. 이를 비트 하나를 사용해 표현한다.
4비트를 쓴다고 가정한다면, MSB에 부호를 사용하고 나머지 3비트로 0부터 7까지의 수를 표현할 수 있다.
부호 비트가 0이면 2진수를 양수로 취급하고 부호 비트가 1이면 2진수를 음수로 취급한다.

그런데 부호와 크기 표현법은 두 가지 이유로 인해 널리 안쓰인다.
첫째, 0을 표현하는 방법이 두 가지라서 비용이 낭비된다.
둘째, 부호와 크기 표현법을 사용하면 XOR과 AND를 통한 덧셈 계산을 사용할 수가 없다.

+1(0001)과 -1(1001)을 더하면 0이 되리라 예상하겠지만 실제로 부호와 크기 표현법으로 XOR과 AND 산술 방식으로 계산하면 -2(1010)이 나온다.
-2는 +1과 -1을 더한 값이 아니다.

2. 1의 보수

음수를 표현하는 또 다른 방법으로는 양수의 모든 비트를 뒤집는 방법이 있다. 이런 방법을 1의 보수(one's complement)표현법이라고 부른다. 부호와 크기 표현법과 비슷하게 부호 비트와 나머지 비트로 나눈다. 그리고 NOT 연산을 통해 보수를 얻는다.

그런데 1의 보수 표현법에도 0을 두 가지 방식으로 표현한다는 문제가 여전히 존재한다. 게다가 1의 보수에서도 덧셈을 쉽게 할 수는 없다. 덧셈을 하려면 순환 올림(MSB쪽에서 올림이 발생하는 경우 LSB로 올림을 전달해야함)을 해야 한다.

이 방식은 잘 작동하기는 하지만 순환 올림을 처리하기 위한 하드웨어를 추가해야 하기 때문에 좋은 방법이 아니다.

현대 컴퓨터에서는 부호와 크기 표현법이나 1의 보수 표현법을 모두 사용하지 않는다. 이 두 방식을 사용한 계산은 추가적인 하드웨어 없이는 제대로 작동할 수 없고, 하드웨어를 추가한다는 말은 비용이 더 든다는 뜻이다.

3. 2의 보수

어떤 수의 비트를 뒤집고(NOT 연산) 1을 추가한다. 이때 MSB에서 올림이 발생하면 이 값은 버린다. 이런 방법을 2의 보수 표현법이라고 부른다.

2의 보수 표현법에는 0을 표현하는 방법이 하나뿐이다.
양수 0의 0000을 뒤집으면 1111을 얻는다. 1111에 1을 더하면 [1]0000이 되는데 1을 올림 비트로 생각하고 무시한다. 따라서 음수 0은 0000이 되며, 양수 0과 똑같다.

마무리

우리가 같은 숫자로 이뤄진 수를 보더라도 문맥에 따라 표현하는 값이 달라질 수 있다는 점을 반드시 염두에 둬야 한다.
예를 들어, 2진수 1111은 2의 보수에서는 -1이지만 부호와 크기 표현법으로는 -7이고 1의 보수에서는 -0이다. 따라서 사용하는 표현법이 무엇인지 반드시 알고 있어야 한다.
profile
FE developer

0개의 댓글