CS/컴퓨터구조

[컴퓨터구조] 하드웨어의 덧셈과 뺄셈 오버플로우

happy_life 2022. 10. 14. 14:41

컴퓨터는 ALU에서 연산을 수행합니다. 그렇다면 컴퓨터는 어떻게 연산을 수행할 수 있을까요? 오버플로우가 발생하는지는 어떻게 알 수 있을까요? 구체적으로 알아보겠습니다.

 

정수의 덧셈

먼저 컴퓨터는 이진수를 사용합니다.  4비트로 표현할 수 있다고 가정할 때 정수의 덧셈을 확인해보겠습니다.

3+4 = 7 입니다. 이는 이진수로 표현하면 0011(2) + 0100(2)입니다. 이를 이진수 연산을 통해 각 자리 수를 더해주면 0111(2) = 7이라는 결과가 나옵니다.

 

정수의 뺄셈

-3 + 3 = 0입니다. 이를 이진수로 표현하면 1101(2) + 0011(2) = 0입니다. 4비트를 넘어가는 수는 버리기 때문입니다.

 

 

 

정수의 덧셈,뺄셈 오버플로우

앞서 덧셈과 뺄셈은 간단한 연산이므로 넘어가고 오버플로우가 발생하는지의 여부를 판단하는 방법에 대해 알아보겠습니다.  부호가 다를 때는 오버플로우를 신경쓰지 않아도 되지만 두 수의 부호가 같을 때는 오버플로우가 발생할 가능성이 있으므로 체크해야합니다.

 

4비트로 표현할 수 있는 정수는 -8 ~ 7입니다. 그렇다면 -7 - 3 = -10 과같이 오버플로우가 발생하는 경우는 어떻게 되는지 알아보겠습니다. 결과로 10110(2)이 나오지만 비트 수를 넘어가는 것을 제외하면 0110(2)입니다.

(-7) + (-3)/ 각자리 올림수 1, 0

 

이 것이 오버플로우인지 아닌지를 체크하기 위해서는 맨 왼쪽의 수, 그 다음번째수의 입력 올림수를 체크해보면 됩니다. 각각의 올림수가 1, 0 이므로 다릅니다. 이렇게 다른 경우 오버플로우가 발생했다고 할 수 있습니다.  오버 플로우가 발생하지 않는 (-3) + (-3) 계산을 비교해보겠습니다.

 

(-3) + (-3)

올림수가 1, 1로 같습니다. 따라서 오버플로우가 발생하지 않는 경우입니다. 실제로 -6은 -8 ~ 7 사이의 값으로 오버플로우가 발생하지 않는 것을 알 수 있습니다.