数值类型的范围

整数类型的范围是实现定义的。头文件 <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。

对于浮点类型 Tmax() 是最大有限值,而 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,因此其范围由该标准确定。