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)。