[Computer Arch.] Carry and Overflow 차이
Computer system에서 arithmetic operation을 하면 연산에 대한 결과를 flag로 나타내는데 그 중에는 zero, negative, carry, overflow 등이 존재한다. 그 중에 carry와 overflow는 혼동하기 쉽다.
8-bit을 기준으로 덧셈 또는 뺄셈을 수행하게 되면 carry 또는 overflow가 발생될 수 있는 여지가 있는데, 각각에 대한 조건은 다음과 같다.
1. Carry
Carry는 최상위 bit (MSB)에서 올림이 발생되면 무조건 carry bit이 set 된다. 예를 들면 다음과 같다.
MSB에서 carry가 발생되면 무조건 carry는 1이 된다.
2. Overflow
Overflow는 연산 결과 값이, 현재 나타낼 수 있는 범위를 초과했다는 의미다. 이 때 조건은 C1 ^ (Exclusie OR) C2
가 1이 되는 경우다.
앞선 carry에서 나온 예시의 경우 C1
, C2
모두 1로 set이 되었기 때문에 exclusive의 결과 또한 0으로 나오기 때문에 overflow가 아니다.
위 경우 1+127은 C1
에서 1이 set되며, C2
에선 1이 set 되지 않는다. 따라서 overflow 조건을 만족한다.
위 경우는 C1
에서 1이 set 되지 않으며 C2
에서 1이 set 된다. 따라서 overflow 조건을 만족한다.
Carry와 overflow의 조건을 다음과 같이 정리해볼 수 있다.
C1 | C2 | Carry (C2) | Overflow | Example |
---|---|---|---|---|
0 | 0 | Unset | Unset | 1 + 1 = 2 |
0 | 1 | Set | Set | -128 + (-128) = 256 |
1 | 0 | Unset | Set | 1 + 127 = 128 |
1 | 1 | Set | Unset | 1 + (-1) = 0 |
One Comment
Pingback: