컴퓨터는 0과 1만 이용해서 숫자를 표현한다.
이때 숫자를 저장하는 공간(비트)을 역할별로 나누어서 사용하기도 하는데,

위 그림은 고정소수점(Fixed Point) 방식의 예시이다.
고정 소수점은 정수를 표현할 비트와 소수를 표현할 비트 수를 미리 정해준다.
1. 부호 비트란 무엇인가

위 사진의 빨간색으로 박스 친 부분, 즉 고정 소수점의 첫 비트가 부호 비트이다.
부호 비트는 말 그대로 부호를 나타내는 비트이다.
이때 부호 비트가 0이면 양수, 1이면 음수를 나타낸다.
2. 1의 보수란 무엇인가?
1의 보수는 이름 그대로 0과 1을 서로 반대로 바꾸는 방식이다.
쉽게 말해,
0은 1로, 1은 0으로 뒤집는 방법
이라고 생각하면 이해하기 쉽다.
예를 들어 +3을 8비트 이진수로 표현하면 다음과 같다.

만약 우리가 -3을 표현하려면 어떻게 할까.
위에서 설명했던 말대로 모든 비트를 반대로 바꾸어보자.

이 값이 바로 1의 보수 방식에서의 -3 이다.
또 다른 예시를 살펴보자.
+5를 음수인 -5로 표현해보자.

즉, 1의 보수에서는 음수를 표현할 때 양수의 모든 비트를 반전 시켜 표현한다.
3. 2의 보수란 무엇인가
앞의 1의 보수 방식에서는 음수를 표현하기 위해 모든 비트를 반대로 바꾸는 방법을 사용했다.
하지만 컴퓨터는 음수를 표현하기 위해 또 다른 방법인 2의 보수(Two’s Complement) 방식도 사용한다.
2의 보수는 생각보다 간단하다.
1의 보수를 만든 뒤, 1을 더하면 된다.
즉,
2의 보수 = 1의 보수 + 1
이라고 이해하면 쉽다.
✏️ 예시: +5을 -5으로 표현하기

1단계: 비트 반전 (1의 보수 만들기)
2단계: 1 더하기
다른 숫자도 같은 방식으로 표현할 수 있다.
예를 들어 +3을 음수로 바꾸면 아래와 같다.

정리하면,
✅ 1의 보수는 비트를 반전하는 것
✅ 2의 보수는 비트를 반전한 후 1을 더하는 것
이라고 이해하면 된다.
4. 1의 보수와 2의 보수 의 차이점
앞서 살펴본 것처럼 1의 보수와 2의 보수는 모두 음수를 표현하기 위한 방법이다.
두 방식 모두 양수를 음수로 바꾸기 위해 비트를 변환한다는 공통점이 있지만,
표현 방식에는 차이가 존재한다.
가장 큰 차이점은 음수를 만드는 방법이다.
4.1 음수를 만드는 방식의 차이
앞서 설명했던 바와 같이 1의 보수는 단순히 모든 비트를 반대로 바꾸는 방식이다.
반면 2의 보수는 여기서 한 단계가 더 추가된다. 비트를 반전한 뒤, 1을 더한다.
앞의 예시를 다시 살펴 보자.
+5를 8비트로 표현한 것을 보면


두 방식은 위와 같이 다르다.
4.2 0의 표현 방식 차이
두 방식의 또 다른 차이점은 0을 표현하는 방식이다.
▶︎ 1의 보수에서 0의 표현 방식
1의 보수에서는 +0과 -0이 서로 다르게 존재한다.

하지만 상식적으로 0은 하나의 숫자이다.
굳이 양수 0과 음수 0을 따로 표현할 필요는 없다.
▶︎ 2의 보수에서 0을 표현하는 방식
1의 보수와 달리 2의 보수에서는

처럼 0이 하나만 존재한다.
5. 컴퓨터는 왜 2의 보수를 사용할까?
앞서 살펴본 것처럼 컴퓨터는 음수를 표현하기 위해 1의 보수와 2의 보수 방식을 사용할 수 있다.
▶︎ 그렇다면 왜 현재 대부분의 컴퓨터는 2의 보수 방식을 사용할까?
그 이유는 계산이 더 정확하고 효율적이기 때문이다.
✔️ 5.1 0이 하나만 존재한다
앞서 설명했듯이 1의 보수 방식은
0을 표현할 때 두 가지 형태가 존재한다. 즉 0이 두 개 존재하는 문제가 발생한다.
반면 2의 보수 방식은 0이 하나만 존재하기 때문에
숫자를 표현하는 방식이 더 자연스럽고 효율적이다.
✔️ 5.2 양수와 음수 계산이 더 정확하다
+5 + (-5) 을 계산했을 때
❌ 부호 비트만 사용하는 방식에서는 올바른 결과가 나오지 않는다.

❌ 1의 보수 방식에서는

값은 0에 가깝지만, +0과 -0이 따로 생기는 문제가 있다.
🅾️ 2의 보수 방식에서는

양수와 음수를 단순히 더하기만 해도 정상적인 결과를 얻을 수 있다.
이로 인해 컴퓨터 입장에서는
복잡한 규칙 없이 단순히 비트끼리 더하는 것만으로도 계산이 가능해지는 방식인
2의 보수 방식을 선택한 것이다
'python' 카테고리의 다른 글
| Python 제어문 – 조건문 (0) | 2026.05.26 |
|---|---|
| BootCamp Day03 1.1 + 0.1 == 1.2 가 False가 나오는 이유 (0) | 2026.05.24 |
| Bootcamp Day02 Python ① 변수 (0) | 2026.05.21 |
| BootCamp Day02 Python ② 문자열 다루기 (0) | 2026.05.21 |
| BootCamp Day01 – Python 기초 다시 복습하기 (0) | 2026.05.20 |