书籍:《C++ Primer Plus 第6版》第三章:
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位。
// limits.cpp -- some integer limits
#include <iostream>
#include <climits> // use limits.h for older systems
int main()
{
using namespace std;
int n_int = INT_MAX; // 给n_int赋值为int类型的最大值
short n_short = SHRT_MAX; // 给n_short赋值为short类型的最大值
long n_long = LONG_MAX; //给n_long赋值为long类型的最大值
long long n_llong = LLONG_MAX;//给n_llong赋值为long long类型的最大值
/*以上INT_MAX、SHRT_MAX、LONG_MAX、LLONG_MAX是在头文件climits中定义的符号常量。
分别代表int的最大值,short的最大值,long的最大值,long long的最大值。
本文附表中,全对climits文件中定义的符号常量进行总结*/
// 下面显示内存的字节数
cout << "int is " << sizeof (int) << " bytes." << endl;//sizeof运算符,对类型名使用时,应加括号
cout << "short is " << sizeof n_short << " bytes." << endl;//sizeof运算符,对变量名使用时,可以省略括号
cout << "long is " << sizeof n_long << " bytes." << endl;
cout << "long long is " << sizeof n_llong << " bytes." << endl;
cout << endl;
cout << "Maximum values:" << endl;
cout << "int: " << n_int << endl;
cout << "short: " << n_short << endl;
cout << "long: " << n_long << endl;
cout << "long long: " << n_llong << endl << endl;
cout << "Minimum int value = " << INT_MIN << endl;
cout << "Bits per byte = " << CHAR_BIT << endl;
// cin.get();
return 0;
}
sizeof 运算符,可以算出int为4bytes,1bytes=8bit,int就是32位。
附表:climits 中的符号常量
符号常量 | 表示 |
---|---|
CHAR_BIT | char的位数 |
CHAR_MAX | char的最大值 |
CHAR_MIN | char的最小值 |
SCHAR_MAX | signed char的最大值 |
SCHAR_MIN | signed char的最小值 |
UCHAR_MAX | unsigned char的最大值 |
SHRT_MAX | short的最大值 |
SHRT_MIN | short的最小值 |
USHRT_MAX | unsigned short的最大值 |
INT_MAX | int的最大值 |
INT_MIN | int的最小值 |
UINT_MAX | unsigned int的最大值 |
LONG_MAX | long的最大值 |
LONG_MIN | long的最小值 |
ULONG_MAX | unsigned long的最大值 |
LLONG_MAX | long long的最大值 |
LLONG_MIN | long long的最小值 |
ULLONG_MAX | unsigned long long的最大值 |
关于整型的选择:
1. int为计算机处理效率最高的长度。如果没有非常说服力的理由来选择其他类型,则应使用int。
2. 如果变量的值不可能为负数,则可以使用无符号类型。
3. 如果知道变量可能表示的整数值大于16位,则应使用long,即使系统上的int类型为32位,也应该这样做,这样程序在移值到16位的系统上时,就不会突然无法正常工作。
4. 如果要存储的值超过20亿,可以使用long long。
5. 如果short比int小,则可以使用short来节省内存,通常,仅当有大型整型数组时,才有必要使用short。如果节省内存很重要,则应使用short而不是使用int,即使它们的长度是一样的。