C++ Primer Plus中说:OOP的本质就是设计并扩展自己的数据类型。
但是在创建自己的数据类型之前,需要先了解一下内置的类型。
内置的C++类型分为:基本类型和复合类型。而基本类型又分整数和浮点数。
本文只介绍一下整型。
先了解几个基本概念:
位(bit):计算机内存的基本单元,即0或是1。例如,8位的内存可以有256种不同的组合,即可以表示0-255或是-128到127.
字节(byte):通常指的是8位的内存单元。字节指的就是描述计算机内存量的度量单位。
C++中的字节(byte):由至少能够容纳实现的基本字符集的相邻位组成,也就是说,可能取值的数目必须等于或超过字符数目。
请看下面的代码:
#include<iostream>
using namespace std;
int main()
{
cout << "short is " << sizeof(short) << " bytes." <<endl;
cout << "int is " << sizeof(int) << " bytes."<< endl;
cout << "long is " << sizeof(long) << " bytes." << endl;
cout << "long long is " << sizeof(long long) << " bytes." << endl;
return 0;
}
输入:
short is 2 bytes.
int is 4 bytes.
long is 4 bytes.
long long is 8 bytes.
由上可知,在32位操作系统的VS2010编译器中,short为2个字节,int和long都是4个字节,long long为8个字节。
(这里顺便说一下sizeof运算符:对类型名(如int),应将名称放在括号里,如上代码所示;但是对于变量名(如n_short),则括号是可选的。更详尽的关于sizeof的信息请参见博客《浅析C++中的sizeof操作符》)
此时你一定会有疑问,为什么long和int都是4个字节呢,那么long的存在是否还具有意义呢?
short与long两个限定符的引用可以为我们提供满足实际需求的不同长度的整型数。int通常代表特定机器中证书的自然长度。
short为16位,long为32位,int可以16位也可以是32位。各编译器可以根据硬件特性自主选择合适的类型长度,但是必须要遵循一个规则:
short至少16位;
int至少与short一样长;
long至少32位,且至少与int一样长;
long long至少64位, 且至少与long一样长。
如果你同我一样,总是无法清晰记住int类型可以表示的数值范围,可以使用climits头文件,该文件中包含了关于整型限制的信息。例如INT_MAX为int的最大取值。
#include<iostream>
using namespace std;
int main()
{
int n_int = INT_MAX; //n_int等于2147483647
cout << n_int << endl;
return 0;
}
下面是不同位数的操作系统与类型字节数的列表
16位 32位 64位
char 1 1 1
char* 2 4 8
short 2 2 2
int 2 4 4
long 4 4 8
long long 8 8 8