📜  C++中的std :: numeric_limits :: max()和std :: numeric_limits :: min()(1)

📅  最后修改于: 2023-12-03 14:59:50.814000             🧑  作者: Mango

C++中的std::numeric_limits::max()和std::numeric_limits::min()

在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