2025. 2. 4. 12:28ㆍ소프트웨어/기초
1. 개요
1의 보수(One’s Complement)는 컴퓨터에서 부호 있는 정수의 표현 방식 중 하나로, 이진수에서 모든 비트를 반전(Complement)하는 방식으로 음수를 표현하는 기법입니다.
즉, 1은 0으로, 0은 1로 바꾸는 것을 의미합니다.
2. 1의 보수 표현 방식
1의 보수 표현에서는 양의 정수는 일반적인 이진수와 동일합니다.
음의 정수는 해당 수의 모든 비트를 반전하여 표현합니다.
예제: 4비트 시스템에서 1의 보수 표현
십진수 | 2진수(기본 - 부호 미반영 수) | 1의 보수(반전 - 부호 반영) | 16진수(헥스) |
+7 | 0111 | 0111 | 0x7 |
+6 | 0110 | 0110 | 0x6 |
+5 | 0101 | 0101 | 0x5 |
+4 | 0100 | 0100 | 0x4 |
+3 | 0011 | 0011 | 0x3 |
+2 | 0010 | 0010 | 0x2 |
+1 | 0001 | 0001 | 0x1 |
+0 | 0000 | 0000 | 0x0 |
-0 | 0000 | 1111 | 0xF |
-1 | 0001 | 1110 | 0xE |
-2 | 0010 | 1101 | 0xD |
-3 | 0011 | 1100 | 0xC |
-4 | 0100 | 1011 | 0xB |
-5 | 0101 | 1010 | 0xA |
-6 | 0110 | 1001 | 0x9 |
-7 | 0111 | 1000 | 0x8 |
➡ 1의 보수에서 0은 0000(+0)과 1111(-0) 두 가지로 표현됨
➡ 음수를 표현할 때 모든 비트를 반전
3. 1의 보수 덧셈과 Carry 보정
3.1 Carry Wrap-Around(자리올림 보정) 메커니즘
1의 보수에서는 덧셈을 수행할 때, Carry(자리올림수)가 발생하면 가장 오른쪽 비트(LSB, Least Significant Bit)로 다시 더하는 연산이 필요합니다.
예제: 4비트 시스템에서 덧셈
✅ (+3) + (-2)
0011 (+3)
+ 1101 (-2)
--------
10000 (캐리 발생)
➡ LSB(최하위 비트)에 Carry 추가: 0000 + 1 = 0001
➡ 최종 결과: 0001 (+1)
✅ (+5) + (-3)
0101 (+5)
+ 1100 (-3)
--------
10001 (캐리 발생)
➡ LSB에 Carry 추가: 0001 + 1 = 0010
➡ 최종 결과: 0010 (+2)
4. 1의 보수를 이용한 뺄셈 연산
1의 보수를 사용하여 뺄셈을 수행하는 방법은 감수의 1의 보수를 취한 후 덧셈을 수행하는 방식입니다.
예제: 5 - 3 연산 (4비트 시스템)
- 5의 이진수 표현: 0101
- 3의 1의 보수 취하기: 0011 → 1100
- 덧셈 수행: 0101 + 1100 = 10001 (Carry 발생)
- Carry 보정: 0001 + 1 = 0010
- 최종 결과: 0010 (+2)
➡ 1의 보수를 활용한 뺄셈은 반전 후 덧셈을 수행하는 방식으로 구현됨
5. 1의 보수 vs 2의 보수 비교
비교 항목 | 1의 보수 (One’s Complement) | 2의 보수 (Two’s Complement) |
음수 표현 방식 | 비트 반전 | 비트 반전 후 +1 |
0의 개수 | 0000(+0), 1111(-0) 두 개 | 하나 (0000 만 존재) |
Carry 처리 | 자리올림 발생 시 보정 필요 | 자동으로 처리됨 |
표현 가능 범위 | -7 ~ +7 | -8 ~ +7 |
사용 여부 | 초창기 컴퓨터에서 사용됨 | 현대 컴퓨터에서 사용됨 |
6. 역사적 배경과 사용 사례
1의 보수 방식은 초창기 컴퓨터에서 사용되었으며, 대표적인 사례는 **UNIVAC 1103A(1956)**입니다.
이 컴퓨터는 36비트 워드 구조를 사용하며, 1의 보수를 활용하여 연산을 수행했습니다. 하지만 0이 두 개 존재하는 문제와 Carry 보정의 복잡성으로 인해 이후 2의 보수 방식으로 대체되었습니다.
7. 결론
1의 보수는 비트를 반전하여 음수를 표현하는 방식이며, 단순한 연산이 가능하지만 0이 두 개 존재하는 문제와 덧셈 시 Carry 보정이 필요하여 현대 컴퓨터에서는 사용되지 않음.
대신 2의 보수가 표준으로 사용되며, 1의 보수는 이론적으로만 의미가 있는 개념으로 남아있습니다.
'소프트웨어 > 기초' 카테고리의 다른 글
1의 보수 vs 2의 보수 (0) | 2025.02.04 |
---|---|
2의 보수(Two’s Complement) 정리 (0) | 2025.02.04 |
오픈 데이터 라이선스 정리 (0) | 2025.02.01 |
오픈소스 라이선스 정리 (0) | 2025.02.01 |
시간 복잡도 (0) | 2025.01.04 |