C++对整型short、int、long和long long的长度规则定义如下:
- short 至少16位;
- int 至少和short一样长;
- long 至少32位,且至少和int一样长;
- long long 至少64位,且至少和long一样长。
可能这个地方比较难以理解,为什么C++的规则那么奇怪,什么叫至少呢?
因为C++是一门跨平台的语言,对于不同的系统来说,整型short、int、long和long long的长度是不一样的,这个至少给人理解上的这个类型的长度可变,是针对不同系统来说是可变的,针对一个系统,长度是固定的,假如short有16位,那么int最少也要有16位。
下面是通过 C++命令 测量整形的长度
注:sizeof 运算符,可以算出int为4bytes,1bytes=8bit,int就是32位。
#include <iostream>
#include <climits> //定义了符号常量
int main()
{
using namespace std;
int n_int = INT_MAX;
short n_short = SHRT_MAX;
long n_long = LONG_MAX;
long long n_llong = LLONG_MAX;
// sizeof operator yields size of type or of variable
cout << " sizeof operator yields size of type or of variable. " << endl;
cout << " int is " << sizeof(int) << " bytes. " << endl;
cout << " short is " << sizeof n_short << " bytes." << endl;
cout << " long is " << sizeof n_long << " bytes." << endl;
cout << " n_llong is " << sizeof n_llong << " bytes." << endl;
cout << endl;
// Maximum values
cout << "Maximum values: " << endl;
cout << "int Maximum values: " << n_int << endl;
cout << "short Maximum values: " << n_short << endl;
cout << "long Maximum values: " << n_long << endl;
cout << "long long Maximum values: " << n_llong << endl;
cout << endl;
// Minimum values
cout << "Minimum values: " << endl;
cout << "int Minimum values: " << INT_MIN << endl;
cout << "short Minimum values: " << SHRT_MIN << endl;
cout << "long Minimum values: " << LONG_MIN << endl;
cout << "long long Minimum values: " << LLONG_MIN << endl;
cout << endl;
cin.get();
cin.get();
return 0;
}
运行结果:
关于整型的选择:
1. int为计算机处理效率最高的长度。如果没有非常说服力的理由来选择其他类型,则应使用int。
2. 如果变量的值不可能为负数,则可以使用无符号类型。
3. 如果知道变量可能表示的整数值大于16位,则应使用long,即使系统上的int类型为32位,也应该这样做,这样程序在移值到16位的系统上时,就不会突然无法正常工作。
4. 如果要存储的值超过20亿,可以使用long long。
5. 如果short比int小,则可以使用short来节省内存,通常,仅当有大型整型数组时,才有必要使用short。如果节省内存很重要,则应使用short而不是使用int,即使它们的长度是一样的。
参考资料
[1] C++ Primer Plus 第6版 —— 第3章
[2] https://blog.csdn.net/u014190698/article/details/80458701