Carry & Overflow

 

Summry

본 문서에서는 carry 와 overflow 를 설명하고 차이를 정리한다.

send me email if you have any questions.


캐리와 오버플로우

간단한 설명을 위해 8비트의 이진수만을 고려한다. 나타낼 수 있는 수의 범위는 -128부터 +127 까지가 된다.

  • 캐리는 최상위 비트(MSB)에서 그 위의 비트로 자리올림이 발생하는 것을 의미한다. 캐리 자체로는 오류 발생과 관련 없다.
  • 오버플로우는 연산 결과 값이 주어진 비트 수로 표현될 수 있는 범위를 넘긴 것을 의미한다. 수의 범위를 넘었기 때문에 오버플로우는 오류 발생을 의미한다.

1 + (-1) = 0

위 예제를 이진수로 계산하면 00000001 + 11111111 = 1 00000000 이 된다. MSB 에서 그 위의 비트로 자리 올림, 즉 캐리가 발생했다. 그러나 이 캐리는 무시된다. 하위 8비트는 올바른 답인 0 을 나타내고 있다.

1 + 127 = 128

위 예제를 이진수로 계산하면 00000001 + 01111111 = 10000000 이 된다. 캐리는 발생하지 않았다. 그러나 결과 값인 이진수 10000000 은 십진수 -128 이며 올바른 답인 +128 이 아니다. +128 은 8비트 이진수로 나타낼 수 없는 값이다. 이 경우는 오버플로우가 발생했다.

예제에서 보듯이 캐리는 단지 MSB 에서 그 위 비트로 자리 올림이 발생했음을 의미하는 것이며, 오버플로우는 연산 결과 값이 나타낼 수 있는 숫자 범위를 넘어선 것을 의미하는 것이다.