이진수 덧셈 계산기 쉽게 이해하기 — 개념과 원리
이 계산기는 두 이진수를 자리마다 더하고, 각 자리에서 생기는 올림수를 보여 주며, 고정된 레지스터 폭에서는 부호 없는 오버플로와 부호 있는(2의 보수) 오버플로를 판정합니다. 컴퓨터 과학 수업, 디지털 회로, 저수준 프로그래밍에 유용합니다.
계산 방법
자리 규칙: 0 + 0 = 0, 0 + 1 = 1, 1 + 1 = 0 올림 1, 1 + 1 + 1 = 1 올림 1
합 = A + B를 이진수, 십진수, 16진수로 표시
w비트 레지스터에 남는 결과 = 합의 아래쪽 w비트
부호 없는 오버플로: 맨 왼쪽 자리에서 올림수가 생김
부호 있는 오버플로: 두 입력의 부호 비트가 같은데 남은 결과의 부호가 반대
- 입력의 공백과 밑줄은 무시합니다.
원리
이진수 덧셈은 십진수 덧셈과 똑같은 원리지만 각 자리에는 0과 1만 올 수 있어 1 + 1 = 10, 즉 0을 쓰고 1을 올립니다. 실제 프로세서의 레지스터는 비트 수가 정해져 있습니다. 진짜 합이 한 비트를 더 필요로 하면 그 비트는 사라지는데, 이것이 부호 없는 오버플로입니다. 2의 보수에서는 맨 왼쪽 비트가 음수를 뜻하므로 같은 비트를 부호 있는 수로도 읽을 수 있습니다. 이때 맨 위 비트의 올림은 정상이지만, 양수 둘을 더해 음수가 되거나 음수 둘을 더해 양수가 되면 결과가 범위를 벗어난 것이며 이것이 부호 있는 오버플로입니다.
예제 풀이
기본값인 1011 0110 + 0111 1011, 8비트 레지스터로 계산합니다.
- 십진수로 182 + 123 = 305입니다.
- 자리마다 더하면 올림수는 11111110, 모두 7번입니다.
- 전체 합 = 100110001(십진 305, 16진 131)입니다.
- 8비트에 남는 값은 00110001이고, 맨 위 비트의 올림이 사라지므로 부호 없는 오버플로입니다.
- 부호 있는 수로 읽으면 −74 + 123 = 49이며, 두 입력의 부호가 달라 부호 있는 오버플로는 없습니다.
결과 해석
오버플로가 문제인지는 비트를 어떻게 해석하느냐에 달려 있습니다. 부호 없는 값이라면 305는 8비트(최대 255)에 들어가지 않으므로 남은 값 49는 틀린 답입니다. 부호 있는 값이라면 −74 + 123 = 49는 정확하고 범위 안에 있습니다. 프로세서는 이 두 상황을 보통 캐리 플래그와 오버플로 플래그로 따로 알려 줍니다.
흔한 실수
- 다음 자리로 가는 올림수를 잊는 경우
- 맨 위 비트의 올림을 모두 부호 있는 오류로 보는 경우
- 길이가 다른 수를 앞에 0을 채우지 않고 비교하는 경우
- 2의 보수 값을 부호 없는 수로, 또는 그 반대로 읽는 경우
자주 묻는 질문
이진수로 1 + 1은?
10입니다. 0을 쓰고 다음 자리로 1을 올립니다.
캐리와 오버플로는 어떻게 다른가요?
캐리는 부호 없는 범위 초과를, 오버플로 플래그는 부호 있는 결과의 범위 초과를 알립니다.
2의 보수 음수는 어떻게 읽나요?
맨 위 비트가 1이면 부호 없는 값에서 2^폭을 뺍니다. 1011 0110은 182 − 256 = −74입니다.
출처: D. Tarnoff, Computer Organization and Design Fundamentals (East Tennessee State University), Chapter 3 "Binary Math and Signed Representations"