본문 바로가기
Study/Python

[Python] 컴퓨터가 음수를 관리하는 방법 (2의 보수)

by ngool 2024. 8. 31.

본 포스트에서는 컴퓨터가 음수를 관리하는 방법에 대해 이야기해 볼 것입니다.

컴퓨터는 음수를 "2의 보수"로 관리합니다.

2의 보수라니.. 굉장히 생소하죠?

 

2의 보수가 무엇이고, 컴퓨터는 이것을 어떻게 이용하여 음수를 표현하는지 지금 바로 알아보도록 하죠!


2의 보수(Two's Complement)란?

수학적인 복잡한 것들은 일단 넘어가고, 쉽게 한 마디로 정의해보자면 이렇습니다!

2의 보수이진수 체계에서 음수를 표현하는 방법 중 하나입니다.

 


왜 2의 보수를 사용하여 음수를 관리할까?

1. 연산의 효율성

컴퓨터에게 뺄셈은 덧셈보다 더 복잡한 연산입니다.

이 때, 2의 보수를 사용하면 뺄셈을 덧셈으로 변환할 수 있습니다.

예를 들면, 7 - 5 연산을 7 + (-5) 연산으로 단순화할 수 있습니다.이렇게 하면, 컴퓨터는 뺄셈을 위한 별도의 회로를 설계할 필요 없이, 덧셈 회로만으로 모든 산술 연산을 처리할 수 있게 됩니다. 

 

2. +0과 -0의 문제 해결

2의 보수는 +0과 -0을 따로 취급하지 않도록 만들어 줍니다.

 

2의 보수 시스템에서는 최상위 비트(MSB, Most Significant Bit)라는 것이 있는데요,

이것은 이진수의 맨 앞자리에 위치한 bit로, 음수와 양수를 구분하는 비트입니다.

이진수에서 MSB가 0이면 양수, 1이면 음수로 간주됩니다.

 

이 때, 양수에 0을 포함시킴으로써 0을 +0, -0으로 나눠지지 않게 할 수 있는 것이죠.

-5부터 5까지의 2진수


2의 보수 연산 예시

1. 이진수에서 0과 1을 뒤집기

2. 뒤집어진 수에 +1 하기

10001의 2의 보수
1111000의 2의 보수


2의 보수 특징

2의 보수를 취한 수를, 한번 더 2의 보수를 취하면 원래의 값으로 돌아온다.

10001에 2의 보수를 두번 취하기


2의 보수가 활용되는 상황

파이썬에서는 ~4를 수행하면 -5가 출력된다.

왜 이런 일이 벌어지는 걸까요?

그 과정을 하나하나 파헤쳐봅시다!

 

파이썬이 ~4를 -5로 출력하는 과정

  • 4는 0b0100이다. (MSB : 양수이므로 0)
  • NOT 연산자(~)로 인해 뒤집으면 1011이 된다.
  • MSB는 1이 되었고(음수), 나머지 bit는 011이다.
  • 음수가 되었기 때문에 나머지 bit에 대해 2의 보수를 취하면, 100 + 1 = 101이므로 5가 된다.
  • 따라서 -5가 된다.