📅  最后修改于: 2023-12-03 14:59:50.814000             🧑  作者: Mango
在C++中,有时需要知道一个数据类型的最大值和最小值,这时可以用到std::numeric_limits
库中的max()
和min()
函数。
std::numeric_limits
std::numeric_limits
是一个template class,定义在头文件<limits>
中。它提供了各种数字类型的基本属性和值,包括最小值、最大值、是否有符号、是否整数等。可以通过模版参数来传入所需获取属性的数据类型。
#include <limits>
std::numeric_limits<int> intLimits; // 用于获取int类型的所有属性
max()
和min()
max()
和min()
分别返回指定数据类型的最大值和最小值。它们的函数签名如下:
template <class T> constexpr T numeric_limits<T>::max() noexcept;
template <class T> constexpr T numeric_limits<T>::min() noexcept;
其中,constexpr
表明这是一个编译期常量,可以在编译时被计算。
max()
和min()
的返回值取决于指定的数据类型,例如:
#include <limits>
#include <iostream>
int main()
{
std::cout << std::numeric_limits<int>::max() << std::endl; // 输出2147483647
std::cout << std::numeric_limits<int>::min() << std::endl; // 输出-2147483648
std::cout << std::numeric_limits<double>::max() << std::endl; // 输出1.79769e+308
std::cout << std::numeric_limits<double>::min() << std::endl; // 输出2.22507e-308
return 0;
}
值得注意的是,对于浮点类型,max()
返回的是能够表示的最大值,而min()
返回的是最小的可表示的正数(不是最小的负数)。
除了max()
和min()
,std::numeric_limits
还提供了很多其它有用的属性和方法,例如:
epsilon()
:返回与类型 T 相关的类型的最小幅度。
is_integer
:如果 T 是整数类型,则返回true。
is_signed
:如果 T 是有符号类型,则返回true。
digits
:返回 T 类型的二进制位数。
详细内容可以参考C++中std::numeric_limits。