2017 중등임용 기술 디지털논리회로 전공A 7번 1바이트 2의 보수 덧셈 기출문제 풀이
2017학년도 중등교사 임용시험 · 기술
2의 보수 체계를 사용하는 컴퓨팅 시스템에서 부호 있는 1바이트 크기의 정수형 변수를 이용하여 연산을 하고자 한다. 이 변수에 저장되는 (−120)10 + (−8)10 의 결과값과 (−120)10 + (−9)10 의 결과값을 십진수로 각각 구하여 순서대로 쓰시오.
| (−120)10 + (−8)10 | |
|---|---|
| (−120)10 + (−9)10 |
모범답안과 해설 보기
−128 , 127
첫째는 범위 안이라 −128이 그대로 저장되고, 둘째는 −129가 되어 범위를 벗어나므로 오버플로가 일어나 127이 저장된다.
① 출발점은 표현 범위입니다. 2의 보수로 부호 있는 1바이트를 쓰면 최상위 비트의 자릿값이 −2⁷이므로 나타낼 수 있는 값은 −128부터 +127까지 모두 256가지입니다. 이 범위를 넘어서는 값은 그대로 담기지 못하고 256을 법으로 한 바퀴 돌아 반대쪽 끝으로 되돌아옵니다.
② 첫째 연산은 참값이 −128입니다. 범위의 아래 끝과 정확히 같으므로 담기는 데 아무 문제가 없고, 결과는 −128입니다. 비트로 확인해도 1000 1000 + 1111 1000 = 1 1000 0000 이 되어 8비트에 남는 값이 1000 0000, 곧 −128입니다. 넘어간 자리올림은 버립니다.
| 첫째 연산 (−120) + (−8) | 비트열 | 저장되는 값 |
|---|---|---|
| −120 | 1000 1000 | |
| −8 | 1111 1000 | |
| 합 (8비트에 남는 값) | 1000 0000 | −128 |
| 올림수 판정 | 들어온 올림 1 = 나간 올림 1 | 오버플로 없음 |
③ 둘째 연산은 참값이 −129라서 범위를 벗어납니다. 1000 1000 + 1111 0111 = 1 0111 1111 이므로 8비트에 남는 값은 0111 1111, 곧 +127입니다. 음수 둘을 더했는데 부호 비트가 0인 양수가 나왔다는 것 자체가 오버플로의 신호입니다.
| 둘째 연산 (−120) + (−9) | 비트열 | 저장되는 값 |
|---|---|---|
| −120 | 1000 1000 | |
| −9 | 1111 0111 | |
| 합 (8비트에 남는 값) | 0111 1111 | +127 |
| 올림수 판정 | 들어온 올림 0 ≠ 나간 올림 1 | 오버플로 발생 |
④ 오버플로를 기계가 판정하는 방법은 자리올림 두 개를 견주는 것입니다. 최상위 비트로 들어오는 올림과 최상위 비트에서 나가는 올림이 같으면 정상이고 다르면 오버플로입니다. 첫째 연산은 1과 1로 같아 정상, 둘째 연산은 0과 1로 달라 오버플로입니다.
⑤ 되돌아온 값은 산술로도 확인됩니다. 8비트는 256을 법으로 순환하므로 −129 + 256 = 127 입니다. 실제 C 언어의 char 형에서도 같은 값이 나오며, 이것이 프로그램에서 자릿수를 넘기는 계산이 엉뚱한 부호의 값을 내놓는 이유입니다.
−120은 256 − 120 = 136 = 1000 10002, −8은 256 − 8 = 248 = 1111 10002, −9는 256 − 9 = 247 = 1111 01112 입니다.
가장 흔한 실수 — 두 번째 답을 −129로 적는 것입니다. 문제는 참값이 아니라 “이 변수에 저장되는” 값을 물었으므로, 범위를 벗어난 몫까지 반영한 127을 적어야 합니다.
키워드컴퓨터구조2의보수표현범위오버플로자리올림판정
댓글
댓글 쓰기