📜  C++ 中支持 std::numeric_limits() 的数据类型(1)

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

C++ 中支持 std::numeric_limits() 的数据类型

在 C++ 中,我们可以使用 std::numeric_limits() 模板类来获取各种数值类型的属性信息。下面介绍一些在 C++ 中支持 std::numeric_limits() 的数据类型。

整型

C++ 中的整型有 shortintlonglong long 四种类型,分别对应的是 16、32、32、64 位有符号整数。可以使用 std::numeric_limits<T> 模板类获取整型类型的属性信息。

下面是一个例子:

#include <iostream>
#include <limits>

int main()
{
    std::cout << "short:\n";
    std::cout << "min: " << std::numeric_limits<short>::min() << '\n';
    std::cout << "max: " << std::numeric_limits<short>::max() << '\n';
    std::cout << "digits: " << std::numeric_limits<short>::digits << '\n';
    std::cout << "is_signed: " << std::numeric_limits<short>::is_signed << '\n';

    std::cout << "\nint:\n";
    std::cout << "min: " << std::numeric_limits<int>::min() << '\n';
    std::cout << "max: " << std::numeric_limits<int>::max() << '\n';
    std::cout << "digits: " << std::numeric_limits<int>::digits << '\n';
    std::cout << "is_signed: " << std::numeric_limits<int>::is_signed << '\n';

    std::cout << "\nlong:\n";
    std::cout << "min: " << std::numeric_limits<long>::min() << '\n';
    std::cout << "max: " << std::numeric_limits<long>::max() << '\n';
    std::cout << "digits: " << std::numeric_limits<long>::digits << '\n';
    std::cout << "is_signed: " << std::numeric_limits<long>::is_signed << '\n';

    std::cout << "\nlong long:\n";
    std::cout << "min: " << std::numeric_limits<long long>::min() << '\n';
    std::cout << "max: " << std::numeric_limits<long long>::max() << '\n';
    std::cout << "digits: " << std::numeric_limits<long long>::digits << '\n';
    std::cout << "is_signed: " << std::numeric_limits<long long>::is_signed << '\n';

    return 0;
}

输出:

short:
min: -32768
max: 32767
digits: 15
is_signed: 1

int:
min: -2147483648
max: 2147483647
digits: 31
is_signed: 1

long:
min: -9223372036854775808
max: 9223372036854775807
digits: 63
is_signed: 1

long long:
min: -9223372036854775808
max: 9223372036854775807
digits: 63
is_signed: 1
浮点型

C++ 中的浮点型有 floatdoublelong double 三种类型,分别对应的是单精度浮点数、双精度浮点数和扩展精度浮点数。可以使用 std::numeric_limits<T> 模板类获取浮点型类型的属性信息。

下面是一个例子:

#include <iostream>
#include <limits>

int main()
{
    std::cout << "float:\n";
    std::cout << "min: " << std::numeric_limits<float>::min() << '\n';
    std::cout << "max: " << std::numeric_limits<float>::max() << '\n';
    std::cout << "digits: " << std::numeric_limits<float>::digits << '\n';
    std::cout << "is_signed: " << std::numeric_limits<float>::is_signed << '\n';

    std::cout << "\ndouble:\n";
    std::cout << "min: " << std::numeric_limits<double>::min() << '\n';
    std::cout << "max: " << std::numeric_limits<double>::max() << '\n';
    std::cout << "digits: " << std::numeric_limits<double>::digits << '\n';
    std::cout << "is_signed: " << std::numeric_limits<double>::is_signed << '\n';

    std::cout << "\nlong double:\n";
    std::cout << "min: " << std::numeric_limits<long double>::min() << '\n';
    std::cout << "max: " << std::numeric_limits<long double>::max() << '\n';
    std::cout << "digits: " << std::numeric_limits<long double>::digits << '\n';
    std::cout << "is_signed: " << std::numeric_limits<long double>::is_signed << '\n';

    return 0;
}

输出:

float:
min: 1.17549e-38
max: 3.40282e+38
digits: 24
is_signed: 1

double:
min: 2.22507e-308
max: 1.79769e+308
digits: 53
is_signed: 1

long double:
min: 3.3621e-4932
max: 1.18973e+4932
digits: 64
is_signed: 1
布尔型

C++ 中的布尔型只有两种取值,即 truefalse。可以使用 std::numeric_limits<bool> 模板类获取布尔型类型的属性信息。

下面是一个例子:

#include <iostream>
#include <limits>

int main()
{
    std::cout << "bool:\n";
    std::cout << "min: " << std::boolalpha << std::numeric_limits<bool>::min() << '\n';
    std::cout << "max: " << std::boolalpha << std::numeric_limits<bool>::max() << '\n';
    std::cout << "is_signed: " << std::numeric_limits<bool>::is_signed << '\n';

    return 0;
}

输出:

bool:
min: false
max: true
is_signed: 0
字符型

C++ 中的字符型有 charsigned charunsigned char 三种类型,分别对应的是有符号字符、有符号字符和无符号字符。可以使用 std::numeric_limits<T> 模板类获取字符型类型的属性信息。

下面是一个例子:

#include <iostream>
#include <limits>

int main()
{
    std::cout << "char:\n";
    std::cout << "min: " << static_cast<int>(std::numeric_limits<char>::min()) << '\n';
    std::cout << "max: " << static_cast<int>(std::numeric_limits<char>::max()) << '\n';
    std::cout << "digits: " << std::numeric_limits<char>::digits << '\n';
    std::cout << "is_signed: " << std::numeric_limits<char>::is_signed << '\n';

    std::cout << "\nsigned char:\n";
    std::cout << "min: " << static_cast<int>(std::numeric_limits<signed char>::min()) << '\n';
    std::cout << "max: " << static_cast<int>(std::numeric_limits<signed char>::max()) << '\n';
    std::cout << "digits: " << std::numeric_limits<signed char>::digits << '\n';
    std::cout << "is_signed: " << std::numeric_limits<signed char>::is_signed << '\n';

    std::cout << "\nunsigned char:\n";
    std::cout << "min: " << static_cast<int>(std::numeric_limits<unsigned char>::min()) << '\n';
    std::cout << "max: " << static_cast<int>(std::numeric_limits<unsigned char>::max()) << '\n';
    std::cout << "digits: " << std::numeric_limits<unsigned char>::digits << '\n';
    std::cout << "is_signed: " << std::numeric_limits<unsigned char>::is_signed << '\n';

    return 0;
}

输出:

char:
min: -128
max: 127
digits: 7
is_signed: 1

signed char:
min: -128
max: 127
digits: 7
is_signed: 1

unsigned char:
min: 0
max: 255
digits: 8
is_signed: 0
指针

在 C++ 中,指针数据类型表示一个地址。可以使用 std::numeric_limits<T*> 模板类获取指针类型的属性信息。

下面是一个例子:

#include <iostream>
#include <limits>

int main()
{
    int* ptr = nullptr;

    std::cout << "int*:\n";
    std::cout << "min: " << std::numeric_limits<int*>::min() << '\n';
    std::cout << "max: " << std::numeric_limits<int*>::max() << '\n';
    std::cout << "is_signed: " << std::numeric_limits<int*>::is_signed << '\n';

    return 0;
}

输出:

int*:
min: 0x0
max: 0x7fffffffffffffff
is_signed: 0
总结

使用 std::numeric_limits() 可以获取各种数值类型的属性信息,包括最小值、最大值、使用的二进制位数、是否带符号等等。这对程序员来说非常有用,可以用于比较不同类型的数值范围、判断类型是否合法、处理数据等等。