c 정수형 오버플로우, 언더플로우

떵떵·2022년 5월 15일
0
#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)가 발생한다.

오버플로우(overflow)

오버플로우란 최댓값을 넘어서면 최솟값부터 다시 시작하게 되는 것이다.

char에 128을 저장한다면 최댓값 127 + 1 이라 할 수 있다.
최솟값부터 다시 시작하여 +1 만큼인 -128이 된다는 것이다.

만약 137을 저장한다면 127+11 이므로 -119가 나온다.

언더플로우(underflow)

언더플로우란 오버플로우의 반대로 최솟값을 넘어서면 최댓값부터 다시 시작하게 되는 것이다.

char에 -129를 저장한다면 -128 - 1 이고 최댓값부터 시작하여 127이 나온다.

만약 -138을 저장한다면 -128 -10 이므로 118이 나온다.

0개의 댓글