C/C++的常用数字类型
C/C++中的数字类型按照存储格式可分为整型和浮点型两类,其中整型又包括带符号型和无符号型两种情况。
整型包括short、int、long、long long 及各自的无符号类型unsigned short、unsigned int、unsigned long、unsigned long long;
浮点型包括float、double、long double,之所以浮点型没有unsigned类型,简单来说是因为,浮点数规定内存中数字的首位必须是符号位,而unsigned要求将首位的符号位也用来表示数据,二者相互矛盾。
常用数字类型简介
下表用于说明在VS2015编译器x86平台下,每种数字类型的占用位数、字节数、表示范围等。
数字类型 | 位数 | 字节数 | 范围(整数) | 范围(指数) | 备注 |
---|---|---|---|---|---|
short | 16 | 2 | -32768 ~ 32767 | -215 ~ 215-1 | 至少16位 |
int | 32 | 4 | -2147483648 ~ 2147483647 | -231 ~ 231-1 | >=short |
long | 32 | 4 | -2147483648 ~ 2147483647 | -231 ~ 231-1 | 至少32位,>=int |
long long | 64 | 8 | -9223372036854775808 ~ 9223372036854775807 | -263 ~ 263-1 | 至少64位,>=long |
unsigned short | 16 | 2 | 0 ~ 65535 | 0 ~ 216 | |
unsigned int | 32 | 4 | 0 ~ 4294967295 | 0 ~ 232 | |
unsigned long | 32 | 4 | 0 ~ 4294967295 | 0 ~ 232 | |
unsigned long long | 64 | 8 | 18446744073709551615 | 0 ~ 264 | |
float | 32 | 4 | 1.17549e-38 ~ 3.40282e+38 | ||
double | 64 | 8 | 2.22507e-308 ~ 1.79769e+308 | ||
long double | 64 | 8 | 2.22507e-308 ~ 1.79769e+308 | 精度不低于double,IEEE754标准为128位,实际由编译器和硬件平台决定 |
边界值调用
C语言中通过使用库文件 < limits.h > 来调用多种数字类型的上下界,而C++中可用库文件< limits >调用(部分边界值引用自<limits.h>文件),除上下界外也包含有其他关于数字类型的内容,大家有兴趣可以看下源码。以下代码中列举了常用上下界的调用方法:
#include <iostream>
#include <limits>
#include <limits.h>
using namespace std;
int main()
{
cout << "\n\n*************** C ****************" << endl;
cout << "整型:" << endl;
cout << "short_min:" << SHRT_MIN << endl;
cout << "int_min:" << INT_MIN << endl;
cout << "long_min:" << LONG_MIN << endl;
cout << "long long_min:" << LLONG_MIN << endl;
// unsigned 类型没有MIN下界定义(均为0)
cout << "unsigned short_max:" << USHRT_MAX << endl;
cout << "unsigned int_max:" << UINT_MAX << endl;
cout << "unsigned long_max:" << ULONG_MAX << endl;
cout << "unsigned long long_max:" << ULLONG_MAX << endl;
cout << "浮点型:" << endl;
cout << "float_min:" << FLT_MIN << endl;
cout << "float_max:" << FLT_MAX << endl;
cout << "double_min:" << DBL_MIN << endl;
cout << "double_max:" << DBL_MAX << endl;
cout << "long double_min:" << LDBL_MIN << endl;
cout << "long double_max:" << LDBL_MAX << endl;
cout << "\n\n*************** C++ ****************" << endl;
cout << "整型:" << endl;
cout << "int_min:" << numeric_limits<short>::min() << endl;
cout << "int_min:" << numeric_limits<int>::min() << endl;
cout << "long_min:" << numeric_limits<long>::min() << endl;
cout << "long long_min:" << numeric_limits<long long>::min() << endl;
// unsigned 类型,有上下界函数max()和min(),这里仍旧用上界表示,下界min()均返回0
cout << "unsigned short_max:" << numeric_limits<unsigned short>::max() << endl;
cout << "unsigned int_max:" << numeric_limits<unsigned int>::max() << endl;
cout << "unsigned long_max:" << numeric_limits<unsigned long>::max() << endl;
cout << "unsigned long long_max:" << numeric_limits<unsigned long long>::max() << endl;
cout << "浮点型:" << endl;
cout << "float_min:" << numeric_limits<float>::min() << endl;
cout << "float_max:" << numeric_limits<float>::max() << endl;
cout << "double_min:" << numeric_limits<double>::min() << endl;
cout << "double_max:" << numeric_limits<double>::max() << endl;
cout << "long double_min:" << numeric_limits<long double>::min() << endl;
cout << "long double_max:" << numeric_limits<long double>::max() << endl;
return 0;
}
代码输出结果如下: