컴퓨터(Computer Science)/컴퓨터구조(Computer Arichitecture)

2의 보수(2's complement) [컴퓨터구조]

게임이 더 좋아 2020. 5. 18. 15:25
반응형
728x170

최근 다시 정리:

[프로그래밍언어(Programming Language)/C || C++] - 2의 보수, 2's complement [C]

 

솔직히 그냥 이진법만 알지

컴퓨터에 관심이 하나도 없으면 모를 것 같은 2의 보수에 대해서 알아보려고 한다.

 

나도 처음에는 감이 하나도 안왔다... 뭐길래?? 

 


우선 컴퓨터는 2진수를 사용한다. 0과 1 이거는 컴퓨터를 배우지 않아도 살다보면 알게 되는 상식 중에 하나였다.

 

그런데 우리는 2진수에서 음수를 표현할 때 -하나 붙혀서 표현했지만 컴퓨터는 어떻게 표현할까? 라는 의문을 가진다.

(안 가졌으면... 그럴 수 있지)

 

아무튼 컴퓨터는 음수를 010101로 어떻게 표현할까? 그래서 나온 것이 2의 보수이다.

 

우선 MIPS를 배웠으니 MIPS에서는 수 표현을 어떻게 할까부터 알아보자

 


분명 우린 MIPS가 32비트 크기의 레지스터라고 배웠다. 

 

그렇다면 1011(two)는 어떻게 표현할까??

 

답부터 보자면 이렇게 된다. 우리가 숫자를 표현할 때와 마찬가지로 오른쪽이 가장 작은 자리 수이다.

 

**이를 MSB(Most Siginificant Bit)라고 말한다. 가장 왼쪽의 비트가 가장 큰 자리 수 라는 뜻이다.

 

뭐 32비트니까 2^32가지의 숫자를 표현할 수 있겠거니 할 수 있다.

 

맞다. 그런데 여기서도 음수는 아직 안보인다

??? 

 

**눈치가 빠른 사람은 2^32의 양수를 표현할 수 있다면 2^31(양수) + 2^31(음수) 로 표현할 수 있지 않을까?

라고 생각한다면 굿구굿

 


그래 1비트로 부호를 표현한다고 하자 

 

부호를 어디다 붙여야 그냥 이진법만 알지

 

컴퓨터에 관심이 하나도 없으면 모를 것 같은 2의 보수에 대해서 알아보려고 한다.

 

나도 처음에는 감이 하나도 안왔다... 뭐길래?? 

 

우선 컴퓨터는 2진수를 사용한다. 0과 1 이거는 컴퓨터를 배우지 않아도 살다보면 알게 되는 상식 중에 하나였다.

 

그런데 우리는 2진수에서 음수를 표현할 때 -하나 붙혀서 표현했지만 컴퓨터는 어떻게 표현할까? 라는 의문을 가진다.

 

(안 가졌으면... 그럴 수 있지)

 

 

 

아무튼 컴퓨터는 음수를 010101로 어떻게 표현할까? 그래서 나온 것이 2의 보수이다.

 

우선 MIPS를 배웠으니 MIPS에서는 수 표현을 어떻게 할까부터 알아보자

 

분명 우린 MIPS가 32비트 크기의 레지스터라고 배웠다. 

 

그렇다면 1011(two)는 어떻게 표현할까??

 

답부터 보자면 이렇게 된다. 우리가 숫자를 표현할 때와 마찬가지로 오른쪽이 가장 작은 자리 수이다.

 

**이를 MSB(Most Siginificant Bit)라고 말한다. 가장 왼쪽의 비트가 가장 큰 자리 수 라는 뜻이다.

 

뭐 32비트니까 2^32가지의 숫자를 표현할 수 있겠거니 할 수 있다.

 

맞다. 그런데 여기서도 음수는 아직 안보인다

 

??? 

 

**눈치가 빠른 사람은 2^32의 양수를 표현할 수 있다면 2^31(양수) + 2^31(음수) 로 표현할 수 있지 않을까?

 

라고 생각한다면 굿구굿

 


 

 

그래 1비트로 부호를 표현한다고 하자 

이를 부호와 크기(sign and magnitude) 방법이라고 한다.

 

 

 

부호를 어디다 붙여야할까? 왼쪽 끝에? 오른쪽 끝에?.. 이 외에도 많은 문제점이 있다

+0 과 -0은 값이 같음에도 따로 존재하게 되는 것이다. 

 

그래서 결국 이 방법은 폐기해버리고 새로운 방법을 찾았다

 

++인간은 역시 불편해야 발전한다

 

우선 이 질문을 해봤다

"작은 수에서 큰 수를 뺄 때 부호 없는 수의 경우에 결과가 어떻게 될까?"

 

답은 0들로 시작되는 수에서 빌림을 수행해서 결과는 1로 시작하는 수가 되는 것이다.

 

자세한 내용은 생략하고//생략했지만 위의 답을 생각해본다면 0이 양수고 1이 음수인 이유를 알게 된다

 

각설하고

맨 처음 비트가 0이면 양수 1이 나오면 음수가 된다

 

그래서 결국 32비트의 수 표현 범위는

 

이렇게 된다.

 


0 ~ (2^31 - 1)

-(2^31)~0

 

이렇게 되겠다. 

 

또 양수인지 음수인지 알려면 맨 처음 비트만 조사하면 되겠다.

 

 

++ 이진법>> 십진법으로 바꾸기

 

 

728x90
반응형
그리드형