1、整型
不同的C++整型使用不同的内存量来储存整数。使用的内存量越大,则可以表示整数的范围也就越大。另外,有的类型(符号类型)可以表示数值的正负,而有的类型(无符号类型)却不能表示负值。术语宽度用来表示储存整数是使用的内存量。宽度越大,所占内存也就越大。这里按照宽度大小依次从小到大排序为char,short,int,long int以及C++11新加的long long int.每种类型都分为有符号类型和无符号类型,一共是十种类型可供选择。这里由于char类型的特殊性,放在以后再讲,这里先介绍其他类型。
2、整型short,int,long,long long
计算机内存由一些叫做位(bit)的单元组成。C++的short,int,long,long lon类型通过使用不同数目的位来储存值,最多能储存四种不同宽度的值,这里由于不同的系统的原因,导致每个系统的宽度都不确定,所以不能确定这四种类型具体的宽度,不过借鉴C中的宽度,它确保了最小的宽度:
1)short值至少是16位
2)int至少与short一样长
3)long至少32位,且至少与int一样长
4)long long至少64位,且至少也long一样长
3、位与字节
计算机的基本储存单元是位(bit).可以将位看做电子开关,可以开,也可以关,开就是1,关就是0,一个8位的内存块可以产生256种不同的组合,因为每一位都有两种设置,那么八位就是2*2*2*2*2*2*2*2,即256种。因此,8位单元可以表示0~255或者是-128~127.同理,16位单元能表示65536个不同的组合,32位单元能表示4294967296个不同的组合。64位则更大,long long的值大到能够储存当前地球上的所有人数和星星的个数。
字节(byte)通常指的是8位的内存单元。从这个意义上说,字节指的就是描述计算机内存量的度量单位,1KB等于1024字节,1MB等于1024KB.然而C++对字节的定义与此不同,它描述的字节是一个字节至少能储存完整的基本字符集,也就是说字节的宽度至少要超过基本字符集的宽度,所以字节通常使用的都是8位,而在国际上有些系统的字节数更多,例如Unicode,故字节数要使用更大的位数。总而言之,位与字节都是描述计算机的内存度量,只需要弄清楚各个类型的储存宽度即可。
4、检索各类型的长度
既然由于系统的原因,使得各个系统的类型长度都不同相同,那么要如何知道在一个系统中的类型的具体长度呢?这样就要用到sizeof运算符了,它的基本单位是字节,有两种使用方法,一是通过传递不同的类型参数,它会返回类型的具体字节数,二是通过传递不同类型的变量从而返回其变量类型的字节数。其次是头文件climits,它定义了各种限制的符号名称。例如,INT_MAX为int的最大取值,CHAR_BIT则是字节的位数,下面是具体的示范
#include<iostream>
#include<climits>
using namespace std;
int main()
{
int n_int=INT_MAX;
short n_short=SHRT_MAX;
long n_long=LONG_MAX;
cout<<"int is "<<sizeof(int)<<" bytes."<<endl;
cout<<"short is "<<sizeof(n_short)<<" bytes."<<endl;
cout<<"long is "<<sizeof n_long<<" bytes."<<endl;
cout<<" byte per bit = "<<CHAR_BIT<<endl;
}
int is 4 bytes.
short is 2 bytes.
long is 4 bytes.
byte per bit = 8
这就是以上代码运行的结果.此外要说明的是当使用sizeof运算符时,如果参数是类型名,则要使用括号,如果是变量名,括号可以省略。