문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들

2의 보수, 2's complement [C]

게임이 더 좋아 2021. 3. 24. 06:24
반응형
728x170

 

어떤 비트 연산보다도 2의 보수라는 것이 뭔지 몰라서 인터넷을 찾아보다가

기억을 하기 위해 따로 정리하기로 하였다.

 


 

 

통용적으로 사용되는 2의 보수와 C언어에서 통용되는 2의 보수가 약간 다르다.

 

우선 가장 큰 비트를 우리는 부호를 표현하는 비트로 놔두어 계산한다.

0이면 양수, 1이면 음수를 표현하게 한다.

 

0000 0000 .... 0000 1111  =  15

1000 0000 .... 0000 1111  =  -15

 

하지만 이런식으로 표현해버리면 연산과정에서 오버헤드가 높게 발생하고

0을 가리키는 수가 2개가 되어버린다.

0, -0 차이가 없다.

 

0000 0000 .... 0000 0000  =  0

1000 0000 .... 0000 0000 =  -0

 

때문에 컴퓨터에서 사용하는 2의 보수는 다르게 계산한다.

 

일반적으로 32-bit라고 할 때.. 

**왜 32bit냐면.. MIPS, RISC Architecture 등등.. 처음에 32비트로 나와서 그렇다.

 

컴퓨터에선 이렇게 알아듣도록 한다.

?????  뭔데?

이게 바로 -a를 표현하는 방식이다.

?????

어려운데???

 


 

다시 설명하자면

하지만 32비트로 하면 귀찮으니까 줄여보자

0111 -> 7이다.

더해서 0이 되는 수가 있다면 그것은 바로 -7이 될 것이다.

 

어떤 수가 될까 생각해보니 

1001 -> 값을 모른다하자 -> 하지만 위의 값과 더하면 0이 되는 것은 확실함.

 

그래서 어떤 수의 보수를 찾고자하면 

그 수를 not연산을 해주어 부호를 반전시켜준다.

 

0111 -> 1000

거기에 +1을 해준다

 

1001

그러면 보수에 해당하는 값이 나온다.

 

 

반응형
그리드형