有时候想要获取一种类型的最大值, C++在头文件limits.h定义了一些宏,比如
#define SHRT_MIN (-32768)
#define SHRT_MAX 32767
#define USHRT_MAX 0xffff
#define INT_MIN (-2147483647 - 1)
#define INT_MAX 2147483647
#define UINT_MAX 0xffffffff
#define LONG_MIN (-2147483647L - 1)
#define LONG_MAX 2147483647L
#define ULONG_MAX 0xffffffffUL
#define LLONG_MAX 9223372036854775807i64
#define LLONG_MIN (-9223372036854775807i64 - 1)
#define ULLONG_MAX 0xffffffffffffffffui64
但是使用宏有些不好,容易忘记名称。
C++其实也提供了模板类,可以更简单地获取最大、最小值
T numeric_limts<T>::max()
T numeric_limits<T>::min()
下面是一些简单的测试
#include <iostream>
using namespace std;
int main()
{
char cmax = numeric_limits<char>::max();
cout << "char max: " << int(cmax) << endl;
unsigned char ucmax = numeric_limits<unsigned char>::max();
cout << "unsigned char max: " << int(ucmax) << endl;
short smax = numeric_limits<short>::max();
cout << "short max: " << smax << endl;
int imax = numeric_limits<int>::max();
cout << "int max: " << imax << endl;
long lmax = numeric_limits<long>::max();
cout << "long max: " << lmax << endl;
long long llmax = numeric_limits<long long>::max();
cout << "long long max: " << llmax << endl;
return 0;
}
返回值
注意这里用的long long类型是C++ 11标准才有的,是8个字节。
虽然numeric_limits这个方法在limits.h头文件中,但是包含了iostream头文件,似乎也不用包含limits.h。我这个测试用的Visual Studio编译器,可能在其他平台不同。