📅  最后修改于: 2023-12-03 14:39:54.410000             🧑  作者: Mango
在 C++ 中,我们可以使用 std::numeric_limits()
模板类来获取各种数值类型的属性信息。下面介绍一些在 C++ 中支持 std::numeric_limits()
的数据类型。
C++ 中的整型有 short
、int
、long
、long 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++ 中的浮点型有 float
、double
、long 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++ 中的布尔型只有两种取值,即 true
和 false
。可以使用 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++ 中的字符型有 char
、signed char
、unsigned 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()
可以获取各种数值类型的属性信息,包括最小值、最大值、使用的二进制位数、是否带符号等等。这对程序员来说非常有用,可以用于比较不同类型的数值范围、判断类型是否合法、处理数据等等。