카테고리 없음

2의 보수 이용한 음수 표현

abc0123 2018. 7. 1. 13:23
반응형

2의 보수 이용한 음수 표현

컴퓨터 또는 요즘 공부하고 있는 PLC 등 메모리를 사용하는 녀석들은 바보(?) 들이라서 오로지 숫자 0과 1밖에 모릅니다. 상상하는 것 이상의 일들을 하는 녀석들이 두 가지 숫자밖에 모르다니 조금 아이러니하죠?

 

여하튼 그렇기 때문에 숫자나 문자 등 모든 데이터를 0과 1로 변환해서 처리를 하는데요. 오늘은 숫자를 표현할 때 2의 보수를 이용한 음수의 표현 방법에 대해서 기본 개념을 정리해보려고 합니다.

 

메모리

 

예를 들어 PLC에서 2바이트(16비트) 메모리 공간에 숫자 3을 저장하면 다음과 같겠죠?

 

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 0

 1

 1

 

가장 왼쪽에 노란색으로 표시한 비트는 음수(-)와 양수(+)를 정하는 부호 비트로 사용되는데요. 양수이면 0, 음수이면 1이 됩니다. 이처럼 이 녀석이 하는 역할은 엄청나게 중요하기 때문에 이걸 MSB (Most Significant Bit)라고 합니다.

 

 

이제 16비트 메모리 공간에 저장되어 있는 3을 -3으로 바꿔보죠. 어떻게 하면 될까요? 가장 왼쪽의 MSB가 음수와 양수를 정한다고 했으니 다음과 같이 변경하면 -3이 될까요?

 

 0

 

바로 앞에서 정리하기를 MSB가 숫자의 Signed를 표현한다고 했으니 이제 맞을 거 같잖아요? 하지만 아쉽게도 음수를 표현하는 방법이 이렇게 단순하지가 않습니다.ㅠ.ㅠ 만약 이 방법이 맞다면 위의 두 숫자를 더하면 0이 돼야겠죠? 하지만 저 값들을 더해보면...

 

 0

 

이런 결과가 나옵니다. 결과값이 0이 아닌 -6이라는 엉뚱한 값이 나와버리는데 이건 음수의 표현이 잘못돼서 그런 겁니다. 이런 상황을 바로잡기 위해서 PLC 음수의 표현은 2의 보수를 사용해야 합니다.

 

바이너리

 

보수에는 1의 보수와 2의 보수가 있는데 PLC에서 음수를 구할 때는 먼저 모든 비트를 반전 (1 > 0, 0 > 1) 시켜서 1의 보수를 구한 후에 그 데이터에 1을 더해주면 2의 보수에 해당하는 값(음수)을 구할 수 있습니다.

 

해보죠. 먼저 +3의 데이터를 비트 반전 시켜서 1의 보수를 구하면 다음과 같겠죠?

 

 1

 

그리고 여기에 +1을 하면 다음과 같은 값이 됩니다.

 

 1

1

 

이게 -3이 되는 겁니다. 앞에서 알아봤던 것처럼 MSB만 바꿔줘서 음수를 만들 수 있으면 좋겠지만 그렇지가 않네요.^^ 이게 -3 인지 확인하는 방법은 +3과 -3을 더해서 0이 되면 되겠죠? 맨 앞의 +3과 맨 마지막의 -3을 더해보면...

  

 0

 1

 0

 

결과값이 다음과 같이 나오는 걸 확인할 수 있습니다. 그리고 MSB 앞에 올림수(carry) 된 값 1은 버리면 됩니다.

 

이렇게 해서 PLC에서 음수를 표현할 때는 2의 보수를 사용한다는 것을 알아봤습니다. 수고하셨어요.

반응형