数值类型的范围
整数类型的范围是实现定义的。头文件 <limits>
提供 std::numeric_limits<T>
模板,该模板提供所有基本类型的最小值和最大值。这些值满足 C 标准通过 <climits>
和(> = C++ 11)<cinttypes>
标头提供的保证。
std::numeric_limits<signed char>::min()
等于SCHAR_MIN
,小于或等于 -127。std::numeric_limits<signed char>::max()
等于SCHAR_MAX
,大于或等于 127。std::numeric_limits<unsigned char>::max()
等于UCHAR_MAX
,大于或等于 255。std::numeric_limits<short>::min()
等于SHRT_MIN
,小于或等于 -32767。std::numeric_limits<short>::max()
等于SHRT_MAX
,大于或等于 32767。std::numeric_limits<unsigned short>::max()
等于USHRT_MAX
,大于或等于 65535。std::numeric_limits<int>::min()
等于INT_MIN
,小于或等于 -32767。std::numeric_limits<int>::max()
等于INT_MAX
,大于或等于 32767。std::numeric_limits<unsigned int>::max()
等于UINT_MAX
,大于或等于 65535。std::numeric_limits<long>::min()
等于LONG_MIN
,小于或等于 -2147483647。std::numeric_limits<long>::max()
等于LONG_MAX
,大于或等于 2147483647。std::numeric_limits<unsigned long>::max()
等于ULONG_MAX
,大于或等于 4294967295。
Version >= C++ 11
std::numeric_limits<long long>::min()
等于LLONG_MIN
,小于或等于 -9223372036854775807。std::numeric_limits<long long>::max()
等于LLONG_MAX
,大于或等于 9223372036854775807。std::numeric_limits<unsigned long long>::max()
等于ULLONG_MAX
,大于或等于 18446744073709551615。
对于浮点类型 T
,max()
是最大有限值,而 min()
是最小正标准化值。为浮点类型提供了附加成员,这些类型也是实现定义的,但满足 C 标准通过 <cfloat>
头提供的某些保证。
- 成员
digits10
给出精度的小数位数。std::numeric_limits<float>::digits10
等于FLT_DIG
,至少为 6。std::numeric_limits<double>::digits10
等于DBL_DIG
,至少是 10。std::numeric_limits<long double>::digits10
等于LDBL_DIG
,至少为 10。
- 成员
min_exponent10
是最小负 E,使得功率 E 的 10 是正常的。std::numeric_limits<float>::min_exponent10
等于FLT_MIN_10_EXP
,最多 -37。std::numeric_limits<double>::min_exponent10
等于DBL_MIN_10_EXP
,最多 -37。std::numeric_limits<long double>::min_exponent10
等于LDBL_MIN_10_EXP
,最多 -37。
- 成员
max_exponent10
是最大 E,使得功率 E 的 10 是有限的。std::numeric_limits<float>::max_exponent10
等于FLT_MIN_10_EXP
,至少是 37。std::numeric_limits<double>::max_exponent10
等于DBL_MIN_10_EXP
,至少是 37。std::numeric_limits<long double>::max_exponent10
等于LDBL_MIN_10_EXP
,至少是 37。
- 如果成员
is_iec559
为真,则类型符合 IEC 559 / IEEE 754,因此其范围由该标准确定。