컴퓨터/정보>중등 정보>2의 보수와 부호 있는 정수
개념 정리

2의 보수와 부호 있는 정수

단원 개요
컴퓨터가 음수를 표현하는 3가지 방식(부호화 절대값, 1의 보수, 2의 보수)을 비교하고, 덧셈기만으로 뺄셈을 수행하는 2의 보수 체계를 이해합니다.
선수 개념
필수 키워드:부호화 절대값 (Sign-Magnitude)1의 보수 (One's Complement)2의 보수 (Two's Complement)11을 더하여0이 유일하게 하나만 존재nn비트 정수 표현 범위 비교부호 없는 정수 (Unsigned)1의 보수 / 부호화 절대값2의 보수 (Signed)(8비트 기준
1

음수 표현 방식의 진화: 부호화 절대값, 1의 보수, 2의 보수

부호 있는 정수(Signed Integer)에서는 가장 왼쪽의 최상위 비트(MSB, Most Significant Bit)를 부호 비트(0: 양수, 1: 음수)로 사용합니다.

1
부호화 절대값 (Sign-Magnitude): MSB만 부호로 쓰고 나머지 비트는 양수의 절대값 그대로 표기합니다.
•
예(8비트): +5=000001012+5 = 00000101_2, −5=100001012-5 = 10000101_2.
•
한계: +0(000000002)+0(00000000_2)과 −0(100000002)-0(10000000_2) 두 개의 0이 존재하며, 양수와 음수를 더할 때 부호를 따로 비교해야 해서 하드웨어 회로가 복잡해집니다.
2
1의 보수 (One's Complement): 양수의 모든 비트를 반전(0↔10 \leftrightarrow 1)시켜 음수를 표현합니다.
•
예(8비트): +5=000001012→−5=111110102+5 = 00000101_2 \rightarrow -5 = 11111010_2.
•
한계: 여전히 +0(000000002)+0(00000000_2)과 −0(111111112)-0(11111111_2)이 공존하며, 덧셈 시 최상위 자리올림수(Carry)를 다시 맨 끝자리에 더해주는 순환 자리올림(End-around Carry) 연산이 필요합니다.
3
2의 보수 (Two's Complement): 1의 보수(전체 비트 반전)를 취한 뒤 11을 더하여 음수를 표현합니다.
•
예(8비트): +5(000001012)→반전111110102→+1111110112(−5)+5(00000101_2) \xrightarrow{\text{반전}} 11111010_2 \xrightarrow{+1} 11111011_2 (-5).
학습 도움말
2의 보수를 구하는 초고속 지름길: 오른쪽 끝(LSB)에서부터 왼쪽으로 읽어가며 '첫 번째 1이 나올 때까지(그 1을 포함하여)'는 그대로 두고, 그 왼쪽의 모든 비트만 반전시키면 한 번에 2의 보수가 완성됩니다!
2

2의 보수를 사용하는 결정적 이유와 표현 범위

•
0이 유일하게 하나만 존재: 00000000200000000_2에 2의 보수를 취하면 111111112+1=(1)00000000211111111_2 + 1 = (1)00000000_2가 되어, 캐리(1)가 버려지고 똑같은 00000000200000000_2이 됩니다. 이로 인해 남는 비트 패턴 10000000210000000_2을 음수 최솟값(−128-128)으로 추가 할당할 수 있습니다.
•
nn비트 정수 표현 범위 비교:
•
부호 없는 정수 (Unsigned): 0∼2n−10 \sim 2^n - 1 (8비트 기준 0∼2550 \sim 255)
•
1의 보수 / 부호화 절대값: −(2n−1−1)∼+(2n−1−1)-(2^{n-1} - 1) \sim +(2^{n-1} - 1) (8비트 기준 −127∼+127-127 \sim +127)
•
2의 보수 (Signed): −2n−1∼+(2n−1−1)-2^{n-1} \sim +(2^{n-1} - 1) (8비트 기준 −128∼+127-128 \sim +127, 음수가 1개 더 많음!)
•
가산기(Adder) 하나로 뺄셈 처리:
•
A−B=A+(−B)A - B = A + (-B)이므로, BB를 2의 보수로 변환해 더한 뒤 최상위 비트 밖으로 밀려난 자리올림수(Carry-out)를 단순 무시하면 뺄셈 결과가 정확히 도출됩니다.
풀이

1) 7 - 5 = 7 + (-5)로 변환합니다.

+7 = 00000111₂

+5 = 00000101₂ ➔ 1의 보수: 11111010₂ ➔ +1(2의 보수): 11111011₂ (-5)

2) 두 이진수를 더합니다:

00000111₂ + 11111011₂ = (1)00000010₂

8비트를 초과한 최상위 캐리 (1)을 버리면 00000010₂ = +2가 되어 뺄셈이 정확히 성립합니다.

3) 10010110₂는 MSB가 1이므로 음수입니다. 양수 절대값을 구하기 위해 다시 2의 보수를 취하면:

비트 반전(01101001₂) + 1 = 01101010₂ = 64 + 32 + 8 + 2 = 106.

따라서 10010110₂의 10진수 값은 -106입니다.

3

정수 오버플로우(Overflow)와 산술 시프트 주의점

•
정수 오버플로우(Arithmetic Overflow): 연산 결과가 할당된 비트 수의 표현 범위를 벗어나는 현상입니다.
•
부호가 같은 두 수를 더했는데 결과의 부호 비트(MSB)가 원래 부호와 반대로 뒤집히면 오버플로우가 발생한 것입니다.
•
예: 8비트에서 127(011111112)+1(000000012)=100000002=−128127(01111111_2) + 1(00000001_2) = 10000000_2 = -128. 양수에 1을 더했는데 음수 최솟값으로 래핑(Wrapping)되는 현상으로, 실제 아리안 5호 로켓 폭발 사고나 게임 재화 버그의 원인이 되었습니다.
•
논리 시프트 vs 산술 시프트:
•
음수를 오른쪽으로 시프트(>>)할 때 빈자리에 무조건 0을 채우면(논리 시프트) 음수가 양수로 바뀌는 참사가 일어납니다. 따라서 부호 있는 정수는 원래의 부호 비트(MSB, 음수면 1)를 복사해서 채우는 산술 시프트(Arithmetic Shift)를 수행합니다.
주의할 점
8비트 2의 보수에서 최솟값인 -128(10000000₂)에 절댓값 함수 abs()를 취하거나 부호를 반전(-x)시키면, +128을 표현할 수 없어 다시 -128이 되는 오버플로우 버그가 발생하므로 코딩 테스트와 보안 로직에서 각별히 주의해야 합니다.

핵심 요약

  • ✓
    2의 보수는 모든 비트를 반전(1의 보수)시킨 뒤 1을 더하여 구하며, 최상위 비트(MSB)가 1이면 음수다.
  • ✓
    2의 보수 체계는 +0과 -0의 중복 문제를 해결하여 n비트로 -2^(n-1)부터 +2^(n-1)-1까지 표현한다.
  • ✓
    CPU는 2의 보수를 이용해 별도의 감산기 회로 없이 가산기(Adder) 하나로 덧셈과 뺄셈을 통합 처리한다.
  • ✓
    양수+양수가 음수가 되거나 음수+음수가 양수가 되면 정수 오버플로우(Overflow)가 발생한 것이다.

설명 다음에는 직접 풀어 보세요

함께 풀기와 자기 설명을 거쳐 새 문제에 도전해요. 막힌 부분은 보충하고, 다른 날 다시 기억하는지 확인할 수 있어요.

이 단원의 수업 시작하기 →
5문항 연습 세트

2의 보수와 부호 있는 정수 단원 연습 문제

개념을 읽은 뒤 연습 문제로 이해한 내용을 확인해 보세요. 한 세트는 5문항이며, 답안을 제출하면 정답과 풀이를 볼 수 있습니다.

한 세트 5문항 단계별 상세 해설 시험지 PDF 인쇄 지원

참고 근거와 확인 범위

설명·예제·문제 구성 및 오류 수정 책임: 프리런. 위 자료는 표시한 주제를 확인하거나 더 읽기 위한 근거이며, 외부 기관의 공식 수업이나 감수본을 뜻하지 않습니다.

참고 자료 연결 점검: 2026-11-02. 제작 방식·검수 범위와 수정 기록에서 확인 범위를 볼 수 있습니다. 오류는 상단의 의견 보내기 또는 contact@freelearn.io로 알려 주세요.