#include <stdio.h>
int main(void)
{
char num1 = 128;
unsigned num2 = 256;
print("%d, %u\n", num1, num2);
return 0;
}
>>> -128, 0
c언어의 정수형은 자료형 마다 가질수 있는 최댓값이 있다.
char의 최댓값은 127, unsigned char의 최댓값은 255인데 위 코드에서 할당된 숫자를 보면 최댓값 보다 높은 것을 볼 수 있다.
이때 최댓값보다 높은 수를 할당받으면 오버플로우(overflow)가 발생한다.
오버플로우란 최댓값을 넘어서면 최솟값부터 다시 시작하게 되는 것이다.
char에 128을 저장한다면 최댓값 127 + 1 이라 할 수 있다.
최솟값부터 다시 시작하여 +1 만큼인 -128이 된다는 것이다.
만약 137을 저장한다면 127+11 이므로 -119가 나온다.
언더플로우란 오버플로우의 반대로 최솟값을 넘어서면 최댓값부터 다시 시작하게 되는 것이다.
char에 -129를 저장한다면 -128 - 1 이고 최댓값부터 시작하여 127이 나온다.
만약 -138을 저장한다면 -128 -10 이므로 118이 나온다.