int、long和long long
C++的short、int、long和long long类型通过使用不同数目的位来存储值(关于位的概念自行了解),最多能够表示4中不同的整数宽度。C++提供了一种灵活的标准,它确保了最小长度(从C语言借鉴而来),如下:
1. short 至少16位
2. int 至少与 short 一样长
3. long 至少 32 位,且至少与 int 一样长
4. long long 至少64位,且至少与 long 一样长 (此类型为 C++11 新增,旧的编译器可能不支持)
当前很多系统都使用最小长度,即short为16位,long为32位。这仍然为int提供了多种选择,其宽度可以是16位、24位或32位,同时又符合标准;甚至可以是64位,因为long 和 long long 至少长64位。通常,在老式的 IBM PC 的实现中,int的宽度为16位(与short相同),而在Windows XP及以上、Mac OS X、VAX和很多其它微型计算机的实现中为32位,与long相同。
要知道系统中整数的最大长度,可以在程序中使用 C++ 工具来检查类型的长度。首先,sizeof 运算符返回类型或变量的长度,单位为字节。需要注意的是,“字节”的含义依赖于实现,因此在一个系统中,两字节的int可能是16位,而在另一个系统中可能是32位。其次,头文件 climits(在老式实现中为 limits.h)中包含了关于整形限制的信息,它定义了表示各种限制的符号名称。例如,INT_MAX 为 int 的最大取值, CHAR_BIT 为字节的位数。
演示代码
1 #include <iostream>
2 #include <climits>
3
4 int main()
5 {
6 using namespace std;
7
8 int n_int = INT_MAX; //max value for integer number
9 short n_short = SHRT_MAX;
10 long n_long = LONG_MAX;
11 long long n_llong = LLONG_MAX;
12
13 cout << "int is " << sizeof (int) << " bytes." << endl;
14 cout << "short is " << sizeof n_short << " bytes." << endl;
15 cout << "long is " << sizeof n_long << " bytes." << endl;
16 cout << "long long is " << sizeof n_llong << " bytes." << endl;
17 cout << endl;
18
19 cout << "Maximum values: " << endl;
20 cout << "int: " << n_int << endl;
21 cout << "short: " << n_short << endl << "long: " << n_long << endl << "long long: " << n_llong << endl << endl;
22
23 cout << "Minimum int value = " << INT_MIN << endl;
24 cout << "Bits per byte = " << CHAR_BIT << endl;
25
26 return 0;
27 }
运行结果如下(环境:Windows 7 64位,VC++ 2008 sp1, SDK 6.1):
int is 4 bytes.
short is 2 bytes.
long is 4 bytes.
long long is 8 bytes.Maximum values:
int: 2147483647
short: 32767
long: 2147483647
long long: 9223372036854775807Minimum int value = -2147483648
Bits per byte = 8
下面来看一下上述程序的主要编程特性
1. 运算符 sizeof 和头文件 climits
sizeof 运算符指出,在使用8位字节的系统中,int的长度为4个字节。可对类型名或变量名使用 sizeof 运算符。对类型名(如 int)使用 sizeof 运算符是,应将名称放在括号中;但对变量名括号是可选的。
头文件 climits 定义了符号常量来表示类型的限制。编译器厂商提供了 climits 文件,该文件指出了其编译器中的值。
下面将依次列举一些 climits 中的符号常量
1. CHAR_BIT :char的位数
2. CHAR_MAX :char的最大值
3. CHAR_MIN :char的最小值
4. SCHAR_MAX :signed char的最大值
5. SCHAR_MIN :signed char的最小值
6. UCHAR_MAX :unsigned char的最大值
7. SHRT_MAX :short 的最大值
8. SHRT_MIN :short 的最小值
9. USHRT_MAX :unsigned short 的最大值
10. INT_MAX :int 的最大值
11. INT_MIN :int 的最小值
12. UINT_MAX :unsigned int 的最大值
13. LONG_MAX :long 的最大值
14. LONG_MIN :long 的最小值
15. ULONG_MAX :unsigned long 的最大值
16. LLONG_MAX :long long 的最大值
17. LLONG_MIN :long long 的最小值
18. ULLONG_MAX :unsigned long long 的最大值