c언어를 사용중 우리가 자료형의 최댓값과 최솟값을 사용하여야 할때 직접 -2,147,483,648으로 값을 직접 넣기엔 불편하거나 에러가 발생할 수 있다.
이럴때 사용할 수 있는 방법은 아래와 같다
#include <limits.h>
int main()
{
int num1 = INT_MIN; //int의 최솟값
char num2 = CHAR_MIN; //char의 최솟값
short num3 = SHRT_MIN; //short의 최솟값
long num4 = LONG_MIN; //long의 최솟값
long long num5 = LLONG_MIN; //long long의 최솟값
}
위는 자료형의 최솟값을 구하는 코드이다.
해당 방식을 사용하기 위해서는 꼭 자료형의 최댓값과 최솟값이 정의된 헤더파일인 - #include <limits.h>를 선언 해줘야 한다
위의 보기는 모두 자료형의 최솟값을 구하는 식이지만
최댓값은 반대로 MIN대신 MAX를 써주면 된다.
ex) INT_MIN -> INT_MAX
위의 예시들은 모두 signed 자료형인데 unsigned에 해당하는 식도 있다.
unsigned char -> UCHAR_MAX
unsigned short - > USHRT_MAX
unsigned int -> UINT_MAX
unsigned long -> ULONG_MAX
unsigned long long -> ULLONG_MAX
unsigned는 부호없는 정수로서 공통적으로 최솟값 0을 가지므로 따로 MIN은 없다.
위의 식을 이용하여 오버플로우랑, 언더플로우 둘다 발생시킬 수 있다.
overflow
ex) int num1 = INT_MAX + 1;
ex) unsigned short num2 = SHRT_MAX + 1;
underflow
ex) long num3 = LONG_MIN - 1;
ex) unsigned char num4 = 0 - 1;