본문 바로가기
카테고리 없음

[1의 보수, 2의 보수] 음수 연산, 2의 보수가 답이다

by 옥탑방개발자 2020. 12. 11.
728x90

보수

  • 컴퓨터에서 음, 양 구분 하기위해서 최상위 비트를 MSB(부호비트)로 사용해 1이면 음수 0이면 양수 표시
  • "-" (마이너스)라는 개념이 없기 때문에 양수로 음수를 표현하는 방법 이라고 생각하면 됨
  • 최상위 비트 1이면 음수, 0이면 양수

 

 

MSB로 마이너스 숫자 연산

  • (+1)   + (-1) = 0
    0001 + 1001 = 1010

* 최상위 비트 1은 음수, 0은 양수로 봤을 때 2진수 계산의 결과로 0이 아닌 1010의 값을 얻었다. 이 처럼 확인 했을 때
MSB만으로 음수 표현과, 연산 시에 문제점을 확인 할 수 있다. 그래서 1의 보수가 나옴

 

 

1의 보수로 마이너스 숫자 연산

  • (+15) + (-9) = 6
    1111 + 0110 = 10101 (올림수 발생, +1) == 0110
    * 오호 1의 보수를 사용하니까 음수 연산 시에 원하는 결과 값이나옴 오호라!! 하지만

 

  • (+15) + (-15) = 0
    1111 + 0000 = 1111
  • (+1) + (-1) = 0
    0001 + 1110 = 1111

* 15 - 15 = 0 즉, 2진수로 표현해도 0000 이라는 값이 나와야 하지만 1의 보수로 표현 할 수 있는 10진수 0은 2진수로 0000 뿐만 아니라 1111로도 표현 할 수 있기 때문에 문제점을 확인 할 수 있다. 그래서 2의 보수가 나옴

 

 

2의 보수로 마이너스 숫자 연산

  • (+9) + (-15) = -6
    1001 + 0001 = 1010
  • (+15) + (-9) = 6
    1111 + 0111 = 10110 (올림수 생략) == 0110
  • (+1) + (-1) = 0
    0001 + 1111 = 10000 (올림수 생략) == 0000

*MSB, 1의 보수 방식으로 연산시 발생되는 문제를 2의 보수(1의 보수 +1)를 통해서 해결 했다. 프로그램이나 전기적 신호 측면에서도 2의 보수로 연산 되는것을 알았다.

728x90