본문으로 바로가기
728x90
반응형

최근들어 취미로 여러 센서류를 사서 가지고 놀기위해 데이터 시트를 확인하다보니

 

항상 2의 보수(two's complement)라는 말에서 구글 검색창을 열었던 기억이 있어요.

 

feat. 가속도 센서 데이터 시트를 보다보니...

 

2의 보수가 정확히 무엇일까?

2의 보수는 왜 2의 보수라고 하는가?

 

와 같은 궁금증들이 갑자기!! 생겼습니다. 한번 알아보죠.

 

Θ 보수란 무엇인가?

보수는 수학적으로 보충해주는 수라고 표현합니다.

즉, 3에 대한 15의 보수는 12, 10에 대한 13의 보수는 3이 됩니다.

 

Θ 컴퓨터에서는 보수를 왜 사용하는가?

결론부터 말하자면 컴퓨터가 0 과 1로 동작되기 때문에 2진수를 사용하죠. 그런데 2진수를 사용하면 음수(-)에 대한 처리가 불가능하여 보수를 사용하게 되었어요. 또한 보수를 사용하면 컴퓨터에서 뺏셈을 하기가 용이해요.

 

그래서 음수(-)에 대한 처리를 하기 위해서 최상위 비트(MSB)를 보통 부호 비트로 사용하기로 했었죠.

 

근데 단순이 최상위 비트(MSB)를부호 비트로 사용하면 산술연산시 문제가 발생했어요.

2와 -2를 더해보니 0이 아닌 -4가 나온 것이였죠.

=>0010(2) + 1010(-2) = 1100(-4)

 

그래서 보수의 개념이 사용되어지기 시작합니다.

 

Θ 1의 보수(one's complement)는 무엇이며 2의 보수(two's complement)는 무엇인가?

1의 보수(one's complement)는 원하는 비트에 not(~)을 한 것이예요.

 

0010(2) 의 1의 보수(one's complement)는 1101(-2) 와 같이 표현할 수 있죠.

 

1의 보수(one's complement)는 최상위 비트(MSB)를 부호 비트를 쓰는 방식보다 문제가 없었어요.

그런데 1의 보수(one's complement)를 사용하면 두수의 합이 0 일때 문제가 발생해요.

 

0010(2) + 1101(-2) = 1111(0?) 이 나와요.

 

맞아요. 1의 보수(one's complement)에서는 음의 0, 양의 0 이렇게 0이 두개로 나눠져서 문제가 발생했어요.

 

 

그러다보니 1의 보수(one's complement)의 문제를 해결하기 위해 2의 보수(two's complement)를 사용하게 됩니다.

 

2의 보수(two's complement)는 1의 보수(one's complement)에 +1을 한 값이예요.

 

0010(2) 의 2의 보수(two's complement)는 1110(-2) 가 되는 거죠.

 

이렇게 2의 보수(two's complement)를 하면 산술연산시 문제가 발생하지 않아 현재 잘 사용되고 있어요.

 

 

그 이외의 보수의 종류

* 숫자 N에 대한
* 숫자의 x진법
* 숫자의 y자리수

N의 x의 보수
=> x^y -N

N의 x-1의 보수
=> (x^y - 1) -N 

ex) 10진수 120 의 10의 보수와 9의 부수는?
=> 10의 보수: 10^3 - 120 = 1000 - 120 = 880
=> 9의 보수: (10^3 -1) - 120 = 999 - 120 = 879

 

★핵심 내용★

 

즉, 컴퓨터 과학에서의

* 1의 보수는 ~x (0과 1을 반전)

* 2의 보수는 ~x + 1 (0과 1을 반전하고 +1)

 

이제부터라도 잊어버리지 말고 꼭 기억하자!!!

반응형