C 标准库系列之limits.h

  limits.h 类似于float.h,其定义了一些列类型的值的范围、限制值,也就是说该类型的值不可以大于该上界或者小于该类型值的下界;

  glibc中宏定义了一下的值:
    # define MB_LEN_MAX 16 // 多字节字符的最大字节(byte)数为16位
    # define CHAR_BIT 8 // 1个字符所占的字节位数8位
    # define SCHAR_MIN (-128) // 一个有符号字符的最小值
    # define SCHAR_MAX 127 // 一个有符号字符的最大值
    # define UCHAR_MAX 255 // 一个无符号字符的最大值
    # define SHRT_MIN (-32768) // 有符号短整型最小值
    # define SHRT_MAX 32767 // 有符号短整型最大值
    # define USHRT_MAX 65535 // 无符号短整型最大值
    # define INT_MIN (-INT_MAX-1) // 有符号整形最小值
    # define INT_MAX 2147483647 // 有符号整形最大值
    # define UINT_MAX 4294967295U // 无符号整形最大值
    # define LONG_MIN (-LONG_MAX - 1) // 依赖于平台是否支持64位;
    # define LONG_MAX 9223372036854775807L或者2147483647L // 依赖于平台是否支持64位;
    # define ULONG_MAX 18446744073709551615UL或者4294967295UL // 依赖于平台是否支持64位;
    # define LLONG_MAX 9223372036854775807LL // 有符号长长整形最大值
    # define LLONG_MIN (-LLONG_MAX - 1LL) // 有符号长长整形最小值
    # define ULLONG_MAX 18446744073709551615ULL // 无符号长长整形最大值

  微软中提供也同样的宏,其中的不同之处有:
    #define MB_LEN_MAX 5
    #define LONG_MIN (-2147483647L - 1)
    #define LONG_MAX 2147483647L


  微软还提供了便于使用的宏类型如_I8_MIN、_I16_MIN、_UI32_MAX、_I64_MAX等,此外也提供了128位的支持:
    #define _I128_MIN (-170141183460469231731687303715884105727 - 1)
    #define _I128_MAX 170141183460469231731687303715884105727
    #define _UI128_MAX 0xffffffffffffffffffffffffffffffff

  C语言并未对字节长度明确要求,不过一般要求所占字节长度满足:char(unsigned char) < short int(unsigned short int) < int(unsigned int) <= long int(unsigned long int) < long long int(unsigned long long int)。

posted @ 2016-12-03 16:05  浩月星空  阅读(1185)  评论(0编辑  收藏  举报