본 포스트에서는 컴퓨터가 음수를 관리하는 방법에 대해 이야기해 볼 것입니다.
컴퓨터는 음수를 "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으로 나눠지지 않게 할 수 있는 것이죠.

2의 보수 연산 예시
1. 이진수에서 0과 1을 뒤집기
2. 뒤집어진 수에 +1 하기


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

2의 보수가 활용되는 상황
파이썬에서는 ~4를 수행하면 -5가 출력된다.

왜 이런 일이 벌어지는 걸까요?
그 과정을 하나하나 파헤쳐봅시다!
파이썬이 ~4를 -5로 출력하는 과정
- 4는 0b0100이다. (MSB : 양수이므로 0)
- NOT 연산자(~)로 인해 뒤집으면 1011이 된다.
- MSB는 1이 되었고(음수), 나머지 bit는 011이다.
- 음수가 되었기 때문에 나머지 bit에 대해 2의 보수를 취하면, 100 + 1 = 101이므로 5가 된다.
- 따라서 -5가 된다.

'Study > Python' 카테고리의 다른 글
[Python] 출력 성능 비교: 매번 출력 vs 결과 저장 후 한 번에 출력 (0) | 2024.09.10 |
---|---|
[Python] 비트 연산 (0) | 2024.08.31 |
[Python] 예외(exception)와 예외처리(exception handling) (1) | 2024.08.08 |
[Python] 패킹(packing), 언패킹(unpacking) (0) | 2024.07.31 |