함께 배우는 수업 · 컴퓨터/정보
2의 보수와 부호 있는 정수
컴퓨터가 음수를 표현하는 3가지 방식(부호화 절대값, 1의 보수, 2의 보수)을 비교하고, 덧셈기만으로 뺄셈을 수행하는 2의 보수 체계를 이해합니다.
이 수업에서 해 볼 일
- 비트 폭을 고정하고 2의 보수와 오버플로를 구별한다
먼저 알면 좋은 것: 2진수 체계와 자릿값 원리 · 비트 단위 논리 반전(NOT) 개념 · 최상위 비트(MSB)와 최하위 비트(LSB)
오늘의 목표
가입 없이 시작할 수 있어요. 설명을 읽고, 함께 연습한 뒤, 처음 보는 문제에서 직접 확인합니다.
1. 음수 표현 방식의 진화: 부호화 절대값, 1의 보수, 2의 보수
부호 있는 정수(Signed Integer)에서는 가장 왼쪽의 최상위 비트(MSB, Most Significant Bit)를 부호 비트(0: 양수, 1: 음수)로 사용합니다. 1. 부호화 절대값 (Sign-Magnitude): MSB만 부호로 쓰고 나머지 비트는 양수의 절대값 그대로 표기합니다. - 예(8비트): , . - 한계: 과 두 개의 0이 존재하며, 양수와 음수를 더할 때 부호를 따로 비교해야 해서 하드웨어 회로가 복잡해집니다. 2. 1의 보수 (One's Complement): 양수의 모든 비트를 반전()시켜 음수를 표현합니다. - 예(8비트): . - 한계: 여전히 과 이 공존하며, 덧셈 시 최상위 자리올림수(Carry)를 다시 맨 끝자리에 더해주는 순환 자리올림(End-around Carry) 연산이 필요합니다. 3. 2의 보수 (Two's Complement): 1의 보수(전체 비트 반전)를 취한 뒤 을 더하여 음수를 표현합니다. - 예(8비트): .2의 보수를 구하는 초고속 지름길: 오른쪽 끝(LSB)에서부터 왼쪽으로 읽어가며 '첫 번째 1이 나올 때까지(그 1을 포함하여)'는 그대로 두고, 그 왼쪽의 모든 비트만 반전시키면 한 번에 2의 보수가 완성됩니다!2. 2의 보수를 사용하는 결정적 이유와 표현 범위
- 0이 유일하게 하나만 존재: 에 2의 보수를 취하면 가 되어, 캐리(1)가 버려지고 똑같은 이 됩니다. 이로 인해 남는 비트 패턴 을 음수 최솟값()으로 추가 할당할 수 있습니다. - 비트 정수 표현 범위 비교: - 부호 없는 정수 (Unsigned): (8비트 기준 ) - 1의 보수 / 부호화 절대값: (8비트 기준 ) - 2의 보수 (Signed): (8비트 기준 , 음수가 1개 더 많음!) - 가산기(Adder) 하나로 뺄셈 처리: - 이므로, 를 2의 보수로 변환해 더한 뒤 최상위 비트 밖으로 밀려난 자리올림수(Carry-out)를 단순 무시하면 뺄셈 결과가 정확히 도출됩니다.예제로 살펴보기
8비트 2의 보수 체계에서 7 - 5 연산을 덧셈 과정으로 수행하고, 10010110₂가 나타내는 10진수 값을 구하시오.- 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비트에서 . 양수에 1을 더했는데 음수 최솟값으로 래핑(Wrapping)되는 현상으로, 실제 아리안 5호 로켓 폭발 사고나 게임 재화 버그의 원인이 되었습니다. - 논리 시프트 vs 산술 시프트: - 음수를 오른쪽으로 시프트(>>)할 때 빈자리에 무조건 0을 채우면(논리 시프트) 음수가 양수로 바뀌는 참사가 일어납니다. 따라서 부호 있는 정수는 원래의 부호 비트(MSB, 음수면 1)를 복사해서 채우는 산술 시프트(Arithmetic Shift)를 수행합니다.8비트 2의 보수에서 최솟값인 -128(10000000₂)에 절댓값 함수 abs()를 취하거나 부호를 반전(-x)시키면, +128을 표현할 수 없어 다시 -128이 되는 오버플로우 버그가 발생하므로 코딩 테스트와 보안 로직에서 각별히 주의해야 합니다.참고 근거와 확인 범위
- Nand2Tetris · Project 2: Boolean Arithmetic ↗
16비트 2의 보수와 산술논리장치의 연산
설명·예제·문제 구성 및 오류 수정 책임: 프리런. 위 자료는 표시한 주제를 확인하거나 더 읽기 위한 근거이며, 외부 기관의 공식 수업이나 감수본을 뜻하지 않습니다.
참고 자료 연결 점검: 2026-11-02. 제작 방식·검수 범위와 수정 기록에서 확인 범위를 볼 수 있습니다. 오류는 상단의 의견 보내기 또는 contact@freelearn.io로 알려 주세요.