ใ๋ชฉ์ฐจใ
0. ๊ฐ์
1. ๋ด์ฉ
2. ์ค๋ฒํ๋ก์ฐใ์ธ๋ํ๋ก์ฐ(OverflowใUnderflow)
3. ์ถ์ฒ
0. ๊ฐ์
limits.h๋ C์ธ์ด์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ ์ํ์ ๋ฒ์๋ฅผ ๋ํ๋ด๋ ์์๋ค์ ์ ์ํ๋ค.
1. ๋ด์ฉ
์ด๋ฆ | ์ค๋ช | ๊ฐ |
CHAR_BIT | char์ ๋นํธ ์ | 8 |
SCHAR_MIN | signed char์ ์ต์๊ฐ | -127 -1 |
SCHAR_MAX | signed char์ ์ต๋๊ฐ | 127 |
UCHAR_MAX | unsigned char์ ์ต๋๊ฐ | 255[0xFF] |
CHAR_MIN | char์ ์ต์๊ฐ | SCHAR_MIN ๋๋ 0 |
CHAR_MAX | char์ ์ต๋๊ฐ | SCHAR_MAX ๋๋ UCHAR_MAX |
MB_LEN_MAX | ๋ฉํฐ๋ฐ์ดํธ ๋ฌธ์์ ์ต๋ ๋ฐ์ดํธ ์ | 5 |
SHRT_MIN | short์ ์ต์๊ฐ | -32767 -1 |
SHRT_MAX | short์ ์ต๋๊ฐ | 32767 |
USHRT_MAX | unsigned short์ ์ต๋๊ฐ | 65535[0xFFFF] |
INT_MIN | int์ ์ต์๊ฐ | -2147483647 -1 |
INT_MAX | int์ ์ต๋๊ฐ | 2147483647 |
UINT_MAX | unsigned int์ ์ต๋๊ฐ | 4294967295[0xFFFFFFFF] |
LONG_MIN | long์ ์ต์๊ฐ | -2147483647 -1 |
LONG_MAX | long์ ์ต๋๊ฐ | 2147483647 |
ULONG_MAX | unsigned long์ ์ต๋๊ฐ | 4294967295[0xFFFFFFFF] |
LLONG_MIN | long long์ ์ต์๊ฐ | -9,223,372,036,854,775,807 - 1 |
LLONG_MAX | long long์ ์ต๋๊ฐ | 9,223,372,036,854,775,807 |
ULLONG_MAX | unsigned long long์ ์ต๋๊ฐ | 18,446,744,073,709,551,615 |
์๋ฃํ | ์ต์๊ฐ | ์ต๋๊ฐ |
char | CHAR_MIN | CHAR_MAX |
short | SHRT_MIN | SHRT_MAX |
int | INT_MIN | INT_MAX |
long | LONG_MIN | LONG_MAX |
long long | LLONG_MIN | LLONG_MAX |
unsigned char | 0 | UCHAR_MAX |
unsigned short | 0 | USHRT_MAX |
unsigned int | 0 | UINT_MAX |
unsigned long | 0 | ULONG_MAX |
unsigned long long | 0 | ULLONG_MAX |
2. ์ค๋ฒํ๋ก์ฐใ์ธ๋ํ๋ก์ฐ(OverflowใUnderflow)
๋ค์๊ณผ ๊ฐ์ด limits.h์ ์ ์๋ ์ต๋๊ฐ์ ๋์ด์๋ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํฉ๋๋ค.
/* integer_max_overflow.c */
#include <stdio.h>
#include <limits.h> // ์๋ฃํ์ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ด ์ ์๋ ํค๋ ํ์ผ
int main()
{
char num1 = CHAR_MAX + 1; // char์ ์ต๋๊ฐ๋ณด๋ค ํฐ ์๋ฅผ ํ ๋น. ์ค๋ฒํ๋ก์ฐ ๋ฐ์
short num2 = SHRT_MAX + 1; // short์ ์ต๋๊ฐ๋ณด๋ค ํฐ ์๋ฅผ ํ ๋น. ์ค๋ฒํ๋ก์ฐ ๋ฐ์
int num3 = INT_MAX + 1; // int์ ์ต๋๊ฐ๋ณด๋ค ํฐ ์๋ฅผ ํ ๋น. ์ค๋ฒํ๋ก์ฐ ๋ฐ์
long long num4 = LLONG_MAX + 1; // long long์ ์ต๋๊ฐ๋ณด๋ค ํฐ ์๋ฅผ ํ ๋น. ์ค๋ฒํ๋ก์ฐ ๋ฐ์
// char, short, int๋ %d๋ก ์ถ๋ ฅํ๊ณ long long์ %lld๋ก ์ถ๋ ฅ
// ๋ถํธ ์๋ ์ ์์์ ์ ์ฅํ ์ ์๋ ๋ฒ์๋ฅผ ๋์ด์๋ฉด ์ต์๊ฐ๋ถํฐ ๋ค์ ์์
printf("%d %d %d %lld\n", num1, num2, num3, num4);
// -128 -32768 -2147483648 -9223372036854775808
unsigned char num5 = UCHAR_MAX + 1; // unsigned char์ ์ต๋๊ฐ๋ณด๋ค ํฐ ์๋ฅผ ํ ๋น
// ์ค๋ฒํ๋ก์ฐ ๋ฐ์
unsigned short num6 = USHRT_MAX + 1; // unsigned short์ ์ต๋๊ฐ๋ณด๋ค ํฐ ์๋ฅผ ํ ๋น
// ์ค๋ฒํ๋ก์ฐ ๋ฐ์
unsigned int num7 = UINT_MAX + 1; // unsigned int์ ์ต๋๊ฐ๋ณด๋ค ํฐ ์๋ฅผ ํ ๋น
// ์ค๋ฒํ๋ก์ฐ ๋ฐ์
unsigned long long num8 = ULLONG_MAX + 1; // unsigned long long์ ์ต๋๊ฐ๋ณด๋ค ํฐ ์๋ฅผ ํ ๋น
// ์ค๋ฒํ๋ก์ฐ ๋ฐ์
// unsigned char, unsigned short, unsigned int๋ %u๋ก ์ถ๋ ฅํ๊ณ
// unsigned long long์ %llu๋ก ์ถ๋ ฅ
// ๋ถํธ ์๋ ์ ์์์ ์ ์ฅํ ์ ์๋ ๋ฒ์๋ฅผ ๋์ด์๋ฉด ์ต์๊ฐ 0๋ถํฐ ๋ค์ ์์
printf("%u %u %u %llu\n", num5, num6, num7, num8); // 0 0 0 0
return 0;
}
/* ์คํ ๊ฒฐ๊ณผ */
-128 -32768 -2147483648 -9223372036854775808 0 0 0 0
๋ถํธ ์๋ ์ ์๋ ์ ์ฅํ ์ ์๋ ๋ฒ์๋ฅผ ๋์ด์๋ฉด ์ต์๊ฐ(์์)๋ถํฐ ๋ค์ ์์ํ๊ณ , ๋ถํธ ์๋ ์ ์๋ ๋ฒ์๋ฅผ ๋์ด์๋ฉด ์ต์๊ฐ์ธ 0๋ถํฐ ๋ค์ ์์ํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ต์๊ฐ๋ณด๋ค ์์์ง๋ฉด ์ธ๋ํ๋ก์ฐ๊ฐ ๋ฐ์ํฉ๋๋ค
/* integer_min_underflow.c */
#include <stdio.h>
#include <limits.h> // ์๋ฃํ์ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ด ์ ์๋ ํค๋ ํ์ผ
int main()
{
char num1 = CHAR_MIN - 1; // char์ ์ต์๊ฐ๋ณด๋ค ์์ ์๋ฅผ ํ ๋น. ์ธ๋ํ๋ก์ฐ ๋ฐ์
short num2 = SHRT_MIN - 1; // short์ ์ต์๊ฐ๋ณด๋ค ์์ ์๋ฅผ ํ ๋น. ์ธ๋ํ๋ก์ฐ ๋ฐ์
int num3 = INT_MIN - 1; // int์ ์ต์๊ฐ๋ณด๋ค ์์ ์๋ฅผ ํ ๋น. ์ธ๋ํ๋ก์ฐ ๋ฐ์
long long num4 = LLONG_MIN - 1; // long long์ ์ต์๊ฐ๋ณด๋ค ์์ ์๋ฅผ ํ ๋น. ์ธ๋ํ๋ก์ฐ ๋ฐ์
// char, short, int๋ %d๋ก ์ถ๋ ฅํ๊ณ long long์ %lld๋ก ์ถ๋ ฅ
// ๋ถํธ ์๋ ์ ์์์ ์ต์๊ฐ๋ณด๋ค ์์์ง๋ฉด ์ต๋๊ฐ๋ถํฐ ๋ค์ ์์
printf("%d %d %d %lld\n", num1, num2, num3, num4);
// 127 32767 2147483647 9223372036854775807
unsigned char num5 = 0 - 1; // unsigned char์ ์ต์๊ฐ๋ณด๋ค ์์ ์๋ฅผ ํ ๋น
// ์ธ๋ํ๋ก์ฐ ๋ฐ์
unsigned short num6 = 0 - 1; // unsigned short์ ์ต์๊ฐ๋ณด๋ค ์์ ์๋ฅผ ํ ๋น
// ์ธ๋ํ๋ก์ฐ ๋ฐ์
unsigned int num7 = 0 - 1; // unsigned int์ ์ต์๊ฐ๋ณด๋ค ์์ ์๋ฅผ ํ ๋น
// ์ธ๋ํ๋ก์ฐ ๋ฐ์
unsigned long long num8 = 0 - 1; // unsigned long long์ ์ต์๊ฐ๋ณด๋ค ์์ ์๋ฅผ ํ ๋น
// ์ธ๋ํ๋ก์ฐ ๋ฐ์
// unsigned char, unsigned short, unsigned int๋ %u๋ก ์ถ๋ ฅํ๊ณ
// unsigned long long์ %llu๋ก ์ถ๋ ฅ
// ๋ถํธ ์๋ ์ ์์์ ์ต์๊ฐ๋ณด๋ค ์์์ง๋ฉด ์ต๋๊ฐ๋ถํฐ ๋ค์ ์์
printf("%u %u %u %llu\n", num5, num6, num7, num8);
// 255 65535 4294967295 18446744073709551615
return 0;
}
/* ์คํ ๊ฒฐ๊ณผ */
127 32767 2147483647 9223372036854775807 255 65535 4294967295 18446744073709551615
์ต์๊ฐ์์ 1์ ๋นผ์ ๊ฐ์ด ๋ ์์์ง๋ฉด ์ธ๋ํ๋ก์ฐ๊ฐ ๋ฐ์ํ์ฌ ๋ค์ ํ ๋ฐํด ๋๊ฒ ๋๋ฏ๋ก ์ต๋๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
3. ์ถ์ฒ
โ https://learn.microsoft.com/ko-kr/cpp/c-language/cpp-integer-limits?view=msvc-170
โก https://dojang.io/mod/page/view.php?id=34
'ใโจ๏ธแดsใSTUDY > C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C][Macro] min max (0) | 2023.02.21 |
---|---|
[C][header][stdio.h] printf (0) | 2023.01.31 |
[C][header][stdio.h] scanf (0) | 2023.01.29 |
[C][header][stdio.h] fgets (0) | 2023.01.23 |