혹시 오버플로우가 발생하는 이유가 틀이 지정된 메모리 안에서 그 범위를 넘는 계산을 하면 보수처리를 하다 다른 부호의 값으로 바뀌게 되는 건가요?
소중한 질문 감사드립니다.
그렇습니다. 해당 범위를 넘어가게 되면 순환해서 다른 부호의 값으로 바뀌게 됩니다.
아래 예문을 보면 short 형은 -32768에서 32767까지의 범위를 가지는데 최대치 또는 최소치를 넘게 되면 순환해서 다른 부호의 값으로 넘어가게 됩니다.
#include<stdio.h>
int main(void)
{
shorts_money = 32767;
short s_money1 = -32768;
s_money = s_money + 1;
printf(“s_money = %d”, s_money); // 32768이 아니라 순환해서 -32768로 이동
s_money1 = s_money1 - 1;
printf(“s_money1 = %d", s_money1); // -32769가 아니라 순환해서 32767로 이동
return 0;
}
실행결과
s_money = -32768
s_money1 = 32767