원문 : http://www.c-jump.com/CIS77/CIS77syllabus.htm
1. 오버플로우란?
계산과정에서 결과값이 현재 데이터의 용량에 비해 너무 크거나 너무 작을 때 생기는 현상이다.
오버플로우가 발생하는 예는 다음과 같다.
부호있는 2진 보수 숫자 2개가 더해질 때(뺄셈도 당연히 포함된다)
①두개의 숫자가 양수일 때 결과값이 음수거나
②두개의 숫자가 음수일 때 결과값이 양수일 때
부호없는 숫자가 더해질 때
①최상위 비트를 넘어가는 carry가 발생할 때
2. 2진 계산에서의 오버플로우
보통 속도상의 이유로 컴퓨터 자체는 signed과 unsigned을 구별하지 못하며 따라서 구별하는 것은 우리의 몫이다.
특히 덧셈과 뺄셈의 계산 후 오버플로우의 조건을 아는 것이 중요한데, signed과 unsigned에 따라 조금 다르다.
3. unsigned에서의 오버플로우
unsigned의 계산에서는 단지 최상위 비트에서 발생하는 carry만 확인하면 되므로 탐지 회로는 다음과 같다.
4. signed에서의 오버플로우
INPUTS | OUTPUTS | ||||
---|---|---|---|---|---|
Asign | Bsign | CARRY IN | CARRY OUT | SUMsign | OVERFLOW |
0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 | 1 |
0 | 1 | 0 | 0 | 1 | 0 |
0 | 1 | 1 | 1 | 0 | 0 |
1 | 0 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 1 | 0 | 0 |
1 | 1 | 0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 0 |
따라서 오버플로우가 발생하는 경우는 다음과 같다.
①최상위 비트가 둘다 0이고 carry in이 1일 때 결과값이 1이므로 오버플로우 발생(양수를 더했는데 결과값이 음수)
②최상위 비트가 둘다 1이고 carry in이 0일 때 결과값이 0이므로 오버플로우 발생(음수를 더했는데 결과값이 양수)
표를 보면 보면 오버플로우는 최상위 비트에서의 carry in과 carry out이 다를 때 발생한다는 것을 알수있다.
CARRYin ≠ CARRYout
다시 정리하면 오버플로우는 carry in XOR carry out가 1일 때 발생한다.
Cin XOR Cout =1
탐지 회로는 다음과 같다.
'논리회로' 카테고리의 다른 글
입력 수 9개 이상 가능 카르노 맵 프로그램 "Gorgeous Karnaugh" (2) | 2014.09.27 |
---|