๐•ƒ๐•ฆ๐•„๐•š๐•ฃ

ใ€ŒโŒจ๏ธแด„sใ€STUDY/C

[C][header][limits.h]

by ๋ฃจ๋ฐ€๐•ƒ๐•ฆ๐•„๐•š๐•ฃ2023. 1. 23.
728x90
๋ฐ˜์‘ํ˜•

ใ€Ž๋ชฉ์ฐจใ€
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

728x90
๋ฐ˜์‘ํ˜•

'ใ€ŒโŒจ๏ธแด„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